Files
journal_organizer/test_config_loader_integration.py
T
windyboy f7e54692a9 Initial project setup: Obsidian intelligent journal organizer
- Add core agent architecture with Command + Skill pattern
- Implement Claude API integration for content analysis
- Add Obsidian REST API integration for vault operations
- Create conversational interface (v2.0) with natural language processing
- Add comprehensive configuration management and validation
- Include project documentation and developer guides
- Set up testing framework with unit, integration, and property tests
- Add Kiro specs for Claude API configuration and code quality improvements
- Configure project steering files for development guidelines
2025-12-31 17:55:10 +08:00

160 lines
5.0 KiB
Python

#!/usr/bin/env python3
"""
Simple test to verify ConfigurationLoader integration works correctly
"""
import os
import tempfile
from pathlib import Path
from configuration_loader import ConfigurationLoader, ConfigurationError, EnvironmentVariableError
def test_basic_environment_variable_expansion():
"""Test basic environment variable expansion functionality"""
# Set up test environment variables
os.environ['TEST_API_KEY'] = 'test-key-123'
os.environ['TEST_URL'] = 'https://test.example.com'
# Create test configuration
test_config = {
'api': {
'key': '${TEST_API_KEY}',
'url': '${TEST_URL}',
'timeout': '${TEST_TIMEOUT:-30}', # With default value
'retries': 3 # No environment variable
},
'nested': {
'values': ['${TEST_API_KEY}', 'static-value', '${TEST_URL}']
}
}
# Test expansion
loader = ConfigurationLoader()
expanded = loader.expand_environment_variables(test_config)
# Verify results
assert expanded['api']['key'] == 'test-key-123'
assert expanded['api']['url'] == 'https://test.example.com'
assert expanded['api']['timeout'] == '30' # Default value used
assert expanded['api']['retries'] == 3 # Unchanged
assert expanded['nested']['values'][0] == 'test-key-123'
assert expanded['nested']['values'][1] == 'static-value'
assert expanded['nested']['values'][2] == 'https://test.example.com'
print("✓ Basic environment variable expansion test passed")
def test_missing_required_variable():
"""Test error handling for missing required environment variables"""
# Ensure variable is not set
if 'MISSING_VAR' in os.environ:
del os.environ['MISSING_VAR']
test_config = {
'api': {
'key': '${MISSING_VAR}'
}
}
loader = ConfigurationLoader()
try:
loader.expand_environment_variables(test_config)
assert False, "Should have raised EnvironmentVariableError"
except EnvironmentVariableError as e:
assert 'MISSING_VAR' in str(e)
print("✓ Missing required variable error test passed")
def test_config_file_loading():
"""Test loading configuration from YAML file"""
# Set up test environment variable
os.environ['TEST_CLAUDE_KEY'] = 'sk-ant-test-key'
# Create temporary YAML config file
yaml_content = """
obsidian:
vault_path: "/tmp/test-vault"
rest_api:
url: "https://localhost:27123"
api_key: "test-obsidian-key"
verify_ssl: false
claude:
api_key: "${TEST_CLAUDE_KEY}"
api_url: "${CLAUDE_URL:-https://api.anthropic.com}"
model: "claude-3-5-sonnet-20241022"
max_tokens: 4096
temperature: 0.7
"""
with tempfile.NamedTemporaryFile(mode='w', suffix='.yaml', delete=False) as f:
f.write(yaml_content)
temp_file = f.name
try:
# Load and expand configuration
expanded_config = ConfigurationLoader.load_config(temp_file)
# Verify expansion worked
assert expanded_config['claude']['api_key'] == 'sk-ant-test-key'
assert expanded_config['claude']['api_url'] == 'https://api.anthropic.com' # Default value
assert expanded_config['obsidian']['rest_api']['api_key'] == 'test-obsidian-key'
print("✓ Config file loading test passed")
finally:
# Clean up
Path(temp_file).unlink()
def test_validation_methods():
"""Test validation helper methods"""
# Set up test environment
os.environ['PRESENT_VAR'] = 'present'
if 'MISSING_VAR' in os.environ:
del os.environ['MISSING_VAR']
test_config = {
'present': '${PRESENT_VAR}',
'missing': '${MISSING_VAR}',
'with_default': '${MISSING_VAR:-default_value}'
}
loader = ConfigurationLoader()
# Test validation
missing_vars = loader.validate_environment_variables(test_config)
assert len(missing_vars) == 1
assert 'MISSING_VAR' in missing_vars[0]
# Test environment variable references
env_refs = loader.get_environment_variable_references(test_config)
assert 'PRESENT_VAR' in env_refs
assert 'MISSING_VAR' in env_refs
assert len(env_refs['MISSING_VAR']) == 2 # Used in 'missing' and 'with_default'
print("✓ Validation methods test passed")
if __name__ == '__main__':
print("Testing ConfigurationLoader integration...")
try:
test_basic_environment_variable_expansion()
test_missing_required_variable()
test_config_file_loading()
test_validation_methods()
print("\n✅ All tests passed! ConfigurationLoader integration is working correctly.")
except Exception as e:
print(f"\n❌ Test failed: {e}")
import traceback
traceback.print_exc()
exit(1)
finally:
# Clean up test environment variables
for var in ['TEST_API_KEY', 'TEST_URL', 'TEST_CLAUDE_KEY', 'PRESENT_VAR']:
if var in os.environ:
del os.environ[var]