"""配置管理器边界情况完整测试."""
import pytest
from pathlib import Path
from unittest.mock import Mock, patch, mock_open
from src.config_manager import ConfigManager
class TestConfigManagerEdgeCasesComplete:
"""配置管理器边界情况完整测试类."""
@pytest.fixture
def config_manager(self, temp_config_dir):
"""创建配置管理器."""
return ConfigManager(config_path=temp_config_dir / ".graphitiace" / "config.json")
def test_load_config_file_not_exists(self, config_manager):
"""测试加载配置文件不存在."""
# 确保配置文件不存在
if config_manager.config_path.exists():
config_manager.config_path.unlink()
config = config_manager.load_config()
assert config is not None
assert config.neo4j is None
assert config.api is None
assert config.group_id == "default"
def test_save_config_directory_not_exists(self, config_manager):
"""测试保存配置目录不存在."""
# 删除目录
if config_manager.config_path.parent.exists():
import shutil
shutil.rmtree(config_manager.config_path.parent)
# 配置 Neo4j(会自动创建目录)
result = config_manager.configure_neo4j(
uri="bolt://localhost:7687",
username="neo4j",
password="test"
)
assert result is not None
assert result['success'] is True
assert config_manager.config_path.parent.exists()
def test_load_config_invalid_json(self, config_manager):
"""测试加载无效 JSON 配置."""
# 创建无效的 JSON 文件
config_manager.config_path.parent.mkdir(parents=True, exist_ok=True)
config_manager.config_path.write_text("invalid json content", encoding='utf-8')
# 应该能够处理无效 JSON,返回默认配置
config = config_manager.load_config()
assert config is not None
def test_configure_neo4j_with_database(self, config_manager):
"""测试配置 Neo4j 并指定数据库."""
result = config_manager.configure_neo4j(
uri="bolt://localhost:7687",
username="neo4j",
password="test",
database="custom_db"
)
assert result is not None
assert result['success'] is True
neo4j_config = config_manager.get_neo4j_config()
assert neo4j_config is not None
assert neo4j_config.database == "custom_db"
def test_configure_api_without_model(self, config_manager):
"""测试配置 API 但不指定模型."""
result = config_manager.configure_api(
provider="openai",
api_key="test_key"
)
assert result is not None
assert result['success'] is True
api_config = config_manager.get_api_config()
assert api_config is not None
assert api_config.provider == "openai"
assert api_config.model is None