Files
awoooi/apps/api/tests/test_mcp_tool_result_compat.py
Your Name 60c00d7a5d
All checks were successful
Code Review / ai-code-review (push) Successful in 10s
CD Pipeline / tests (push) Successful in 1m9s
CD Pipeline / build-and-deploy (push) Successful in 3m18s
CD Pipeline / post-deploy-checks (push) Successful in 1m27s
fix(mcp): tolerate legacy tool DTO fields
2026-05-06 16:11:26 +08:00

60 lines
1.9 KiB
Python

import pytest
from src.plugins.mcp.interfaces import MCPTool, MCPToolProvider, MCPToolResult
from src.services.mcp_tool_registry import MCPToolRegistry
def test_mcp_tool_result_accepts_legacy_data_alias() -> None:
result = MCPToolResult(success=True, data={"ok": True})
assert result.execution_id.startswith("mcp-")
assert result.output == {"ok": True}
assert result.to_dict()["output"] == {"ok": True}
def test_mcp_tool_result_keeps_explicit_output_over_data_alias() -> None:
result = MCPToolResult(
success=True,
execution_id="exec-1",
output={"new": True},
data={"legacy": True},
)
assert result.execution_id == "exec-1"
assert result.output == {"new": True}
def test_mcp_tool_result_allows_failure_without_execution_id() -> None:
result = MCPToolResult(success=False, error="blocked")
assert result.execution_id.startswith("mcp-")
assert result.error == "blocked"
def test_mcp_tool_allows_legacy_missing_server_name() -> None:
tool = MCPTool(name="legacy_tool", description="legacy", input_schema={})
assert tool.server_name == ""
@pytest.mark.asyncio
async def test_mcp_registry_stamps_missing_server_name_from_provider() -> None:
class LegacyProvider(MCPToolProvider):
@property
def name(self) -> str:
return "legacy_provider"
async def list_tools(self) -> list[MCPTool]:
return [MCPTool(name="legacy_tool", description="legacy", input_schema={})]
async def execute(self, tool_name: str, parameters: dict) -> MCPToolResult:
return MCPToolResult(success=True, output={"tool": tool_name, "parameters": parameters})
registry = MCPToolRegistry()
count = await registry.register_provider(LegacyProvider())
assert count == 1
registered = registry.get_all_tools()[0]
assert registered.tool.server_name == "legacy_provider"