This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw-skills/skills/obsidian-kb/tests/test_config.py
T
OpenClaw Agent f26d4d8f7f feat: implement obsidian-kb skill with long video chunking
- Multi-source content aggregation (Bilibili/YouTube/Zhihu)
- Smart inbox management with AI quality scoring
- Long video chunking analysis (30min+ auto-segmentation)
- Topic-based organization
- Git auto-sync to Obsidian
- Template system with Jinja2 and fallback rendering
- CLI commands: subscribe, inbox, process, skip, status, search
- Comprehensive test suite with unit and integration tests
- Documentation: README.md and SKILL.md

Checkpoint 7-8 completed by Agent E
2026-02-06 18:15:30 +08:00

145 lines
5.1 KiB
Python

"""
Unit tests for config module.
"""
import unittest
import tempfile
import os
from pathlib import Path
import sys
sys.path.insert(0, str(Path(__file__).parent.parent / 'src'))
from config import Config
class TestConfig(unittest.TestCase):
"""Test Config class."""
def setUp(self):
"""Set up test fixtures."""
self.temp_dir = tempfile.mkdtemp()
self.config_path = Path(self.temp_dir) / "config.yaml"
# Save and clean up environment variables
self.env_backup = {}
for key in ['OPENAI_API_KEY', 'AI_MODEL', 'OBSIDIAN_VAULT_PATH']:
if key in os.environ:
self.env_backup[key] = os.environ[key]
del os.environ[key]
def tearDown(self):
"""Restore environment variables after each test."""
# Restore original environment variables
for key, value in self.env_backup.items():
os.environ[key] = value
# Clean up any that weren't backed up
for key in ['OPENAI_API_KEY', 'AI_MODEL', 'OBSIDIAN_VAULT_PATH']:
if key in os.environ and key not in self.env_backup:
del os.environ[key]
def test_default_config(self):
"""Test default configuration."""
config = Config(config_path=str(self.config_path), load_env=False)
self.assertEqual(config.get('ai.provider'), 'openai')
self.assertEqual(config.get('ai.model'), 'gpt-4')
self.assertTrue(config.get('chunking.enabled'))
self.assertEqual(config.get('chunking.chunk_duration_seconds'), 900)
def test_get_with_default(self):
"""Test get with default value."""
# Ensure clean environment
for key in ['OPENAI_API_KEY', 'AI_MODEL', 'OBSIDIAN_VAULT_PATH']:
if key in os.environ:
del os.environ[key]
config = Config(config_path=str(self.config_path), load_env=False)
# Existing key
self.assertEqual(config.get('ai.model'), 'gpt-4')
# Non-existing key with default
self.assertEqual(config.get('nonexistent.key', 'default'), 'default')
# Non-existing key without default
self.assertIsNone(config.get('nonexistent.key'))
def test_set_value(self):
"""Test setting configuration value."""
config = Config(config_path=str(self.config_path), load_env=False)
config.set('ai.model', 'gpt-3.5-turbo')
self.assertEqual(config.get('ai.model'), 'gpt-3.5-turbo')
config.set('custom.new_key', 'new_value')
self.assertEqual(config.get('custom.new_key'), 'new_value')
def test_save_and_load(self):
"""Test saving and loading configuration."""
# Create and save config
config1 = Config(config_path=str(self.config_path), load_env=False)
config1.set('ai.model', 'gpt-3.5-turbo')
config1.set('custom.test', 'value')
config1.save()
# Load config
config2 = Config(config_path=str(self.config_path), load_env=False)
self.assertEqual(config2.get('ai.model'), 'gpt-3.5-turbo')
self.assertEqual(config2.get('custom.test'), 'value')
def test_properties(self):
"""Test config properties."""
# Ensure clean environment
for key in ['OPENAI_API_KEY', 'AI_MODEL', 'OBSIDIAN_VAULT_PATH']:
if key in os.environ:
del os.environ[key]
config = Config(config_path=str(self.config_path), load_env=False)
self.assertIsNone(config.ai_api_key)
self.assertEqual(config.ai_model, 'gpt-4')
self.assertTrue(config.chunking_enabled)
self.assertEqual(config.chunk_duration, 900)
self.assertEqual(config.long_video_threshold, 1800)
def test_vault_path(self):
"""Test vault path property."""
config = Config(config_path=str(self.config_path), load_env=False)
path = config.vault_path
self.assertTrue(isinstance(path, Path))
def test_env_override_api_key(self):
"""Test environment variable override for API key."""
# Clean up environment first
for key in ['OPENAI_API_KEY', 'AI_MODEL', 'OBSIDIAN_VAULT_PATH']:
if key in os.environ:
del os.environ[key]
os.environ['OPENAI_API_KEY'] = 'test_api_key_123'
config = Config(config_path=str(self.config_path))
self.assertEqual(config.ai_api_key, 'test_api_key_123')
# Clean up
del os.environ['OPENAI_API_KEY']
def test_env_override_model(self):
"""Test environment variable override for model."""
# Clean up environment first
for key in ['OPENAI_API_KEY', 'AI_MODEL', 'OBSIDIAN_VAULT_PATH']:
if key in os.environ:
del os.environ[key]
os.environ['AI_MODEL'] = 'custom-model'
config = Config(config_path=str(self.config_path))
self.assertEqual(config.ai_model, 'custom-model')
# Clean up
del os.environ['AI_MODEL']
if __name__ == '__main__':
unittest.main()