"""render_strategy_insights 工具测试."""
import pytest
from unittest.mock import Mock
from src.tools import handle_tool_call
from src.config_manager import ConfigManager
from src.graphiti_client import GraphitiClient
class TestRenderStrategyInsights:
"""验证策略可视化工具的输出."""
@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_render_strategy_insights_mermaid(self, config_manager):
"""当 ACE 返回数据时应生成 Mermaid 图."""
mock_client = Mock(spec=GraphitiClient)
mock_client.is_connected.return_value = True
ace_manager = Mock()
ace_manager.is_enabled.return_value = True
ace_manager.optimize_tool_input.return_value = {}
ace_manager.get_strategy_heatmap.return_value = {
"success": True,
"generated_at": "2025-12-01T00:00:00Z",
"entries": [
{
"tool_name": "search_entities",
"bucket": "70-100%",
"strategy_count": 2,
"total_usage": 10,
"avg_success_rate": 0.82,
},
{
"tool_name": "add_episode",
"bucket": "40-70%",
"strategy_count": 1,
"total_usage": 4,
"avg_success_rate": 0.61,
},
],
"summary": {
"total_entries": 2,
"total_usage": 14,
"unique_tools": 2,
"groups": [
{"name": "search_entities", "total_usage": 10, "strategies": 2, "avg_success_rate": 0.82},
{"name": "add_episode", "total_usage": 4, "strategies": 1, "avg_success_rate": 0.61},
],
},
}
result = await handle_tool_call(
tool_name="render_strategy_insights",
arguments={"format": "mermaid"},
config_manager=config_manager,
graphiti_client=mock_client,
ace_manager=ace_manager,
)
assert result is not None
text = result[0].text
assert "🎯 策略热力图洞察" in text
assert "```mermaid" in text
assert "search_entities 70-100%" in text
@pytest.mark.asyncio
async def test_render_strategy_insights_ace_disabled(self, config_manager):
"""ACE 未启用时应返回提示."""
mock_client = Mock(spec=GraphitiClient)
mock_client.is_connected.return_value = True
ace_manager = Mock()
ace_manager.is_enabled.return_value = False
ace_manager.optimize_tool_input.return_value = {}
result = await handle_tool_call(
tool_name="render_strategy_insights",
arguments={},
config_manager=config_manager,
graphiti_client=mock_client,
ace_manager=ace_manager,
)
assert result is not None
text = result[0].text
assert "ACE Manager 未启用" in text