"""工具健康检查状态测试."""
import pytest
from unittest.mock import Mock, MagicMock, patch
from src.tools import handle_tool_call
from src.config_manager import ConfigManager
class TestToolsHealthCheckStatus:
"""工具健康检查状态测试类."""
@pytest.fixture
def config_manager(self, temp_config_dir):
"""创建配置管理器."""
return ConfigManager(config_path=temp_config_dir / ".graphitiace" / "config.json")
@pytest.mark.asyncio
async def test_health_check_unhealthy_status(self, config_manager):
"""测试健康检查返回不健康状态."""
with patch('src.health_check.health_check') as mock_health_check:
mock_health_check.return_value = {
"status": "unhealthy",
"timestamp": "2025-01-01T00:00:00",
"checks": {
"database": {"status": "error"},
"configuration": {"status": "ok"}
}
}
result = await handle_tool_call(
tool_name="health_check",
arguments={},
config_manager=config_manager,
graphiti_client=None
)
assert result is not None
assert isinstance(result, list)
result_text = "".join([str(item.text) if hasattr(item, 'text') else str(item) for item in result])
assert "不健康" in result_text or "unhealthy" in result_text.lower() or "❌" in result_text
assert "建议" in result_text or "Neo4j" in result_text
@pytest.mark.asyncio
async def test_health_check_degraded_status(self, config_manager):
"""测试健康检查返回降级状态."""
with patch('src.health_check.health_check') as mock_health_check:
mock_health_check.return_value = {
"status": "degraded",
"timestamp": "2025-01-01T00:00:00",
"checks": {
"database": {"status": "ok"},
"graphiti": {"status": "warning"}
}
}
result = await handle_tool_call(
tool_name="health_check",
arguments={},
config_manager=config_manager,
graphiti_client=None
)
assert result is not None
assert isinstance(result, list)
result_text = "".join([str(item.text) if hasattr(item, 'text') else str(item) for item in result])
assert "降级" in result_text or "degraded" in result_text.lower() or "⚠️" in result_text
assert "提示" in result_text or "受限" in result_text or "tip" in result_text.lower()
@pytest.mark.asyncio
async def test_health_check_healthy_status(self, config_manager):
"""测试健康检查返回健康状态."""
with patch('src.health_check.health_check') as mock_health_check:
mock_health_check.return_value = {
"status": "healthy",
"timestamp": "2025-01-01T00:00:00",
"checks": {
"database": {"status": "ok"},
"configuration": {"status": "ok"},
"graphiti": {"status": "ok"}
}
}
result = await handle_tool_call(
tool_name="health_check",
arguments={},
config_manager=config_manager,
graphiti_client=None
)
assert result is not None
assert isinstance(result, list)
result_text = "".join([str(item.text) if hasattr(item, 'text') else str(item) for item in result])
assert "健康" in result_text or "healthy" in result_text.lower() or "✅" in result_text