"""配置管理器保存失败测试."""
import pytest
from pathlib import Path
from unittest.mock import Mock, patch, mock_open
from src.config_manager import ConfigManager
class TestConfigManagerSaveFailure:
"""配置管理器保存失败测试类."""
@pytest.fixture
def config_manager(self, temp_config_dir):
"""创建配置管理器."""
return ConfigManager(config_path=temp_config_dir / ".graphitiace" / "config.json")
def test_save_config_with_none_config(self, config_manager):
"""测试保存配置但配置为 None."""
# 将配置设为 None
config_manager._config = None
result = config_manager.save_config()
assert result is False
def test_save_config_with_exception(self, config_manager):
"""测试保存配置时发生异常."""
# 配置 Neo4j
config_manager.configure_neo4j(
uri="bolt://localhost:7687",
username="neo4j",
password="test"
)
# Mock 文件写入失败
with patch('builtins.open', side_effect=IOError("Permission denied")):
result = config_manager.save_config()
assert result is False
def test_configure_neo4j_save_failure(self, config_manager):
"""测试配置 Neo4j 但保存失败."""
# Mock 保存失败
with patch.object(config_manager, 'save_config', return_value=False):
result = config_manager.configure_neo4j(
uri="bolt://localhost:7687",
username="neo4j",
password="test"
)
assert result is not None
assert result['success'] is False
assert "保存失败" in result['message']
def test_configure_api_save_failure(self, config_manager):
"""测试配置 API 但保存失败."""
# Mock 保存失败
with patch.object(config_manager, 'save_config', return_value=False):
result = config_manager.configure_api(
provider="openai",
api_key="test_key"
)
assert result is not None
assert result['success'] is False
assert "保存失败" in result['message']
def test_set_group_id_save_failure(self, config_manager):
"""测试设置组 ID 但保存失败."""
# Mock 保存失败
with patch.object(config_manager, 'save_config', return_value=False):
result = config_manager.set_group_id("test_group")
assert result is not None
assert result['success'] is False
assert "设置失败" in result['message'] or "保存失败" in result['message']
def test_reset_config_save_failure(self, config_manager):
"""测试重置配置但保存失败."""
# 先配置一些内容
config_manager.configure_neo4j(
uri="bolt://localhost:7687",
username="neo4j",
password="test"
)
# Mock 保存失败
with patch.object(config_manager, 'save_config', return_value=False):
result = config_manager.reset_config()
assert result is not None
assert result['success'] is False
assert "重置失败" in result['message'] or "保存失败" in result['message']