Files
lda-wf/tests/wf_mcp/service/test_adapters.py
T

62 lines
2.2 KiB
Python

from __future__ import annotations
from wf_mcp.broker import WfMcpService
from wf_mcp.models import ConnectionConfig
from wf_mcp.storage import FileStore
from ..test_support import (
FakeAdapter,
local_temp_root,
)
from .conftest import ContentOnlyOutputAdapter
async def test_service_catalog_preserves_json_schema_description_metadata() -> None:
service = WfMcpService(store=FileStore(local_temp_root() / "schema_doc_store"))
service.register_connection(
ConnectionConfig(id="demo.personal", server="demo", account="personal")
)
service.register_adapter("demo", FakeAdapter())
await service.refresh_connection_catalog("demo.personal")
payload = service.get_catalog().as_payload()
node = payload["nodes"][0]
assert node["input_schema"]["properties"]["text"]["description"] == "Text to echo"
async def test_service_preserves_content_only_tool_output_schema_for_workflows() -> (
None
):
service = WfMcpService(store=FileStore(local_temp_root() / "content_only_store"))
service.register_connection(
ConnectionConfig(
id="everything.default", server="everything", account="default"
)
)
service.register_adapter("everything", ContentOnlyOutputAdapter())
await service.refresh_connection_catalog("everything.default")
payload = service.get_catalog().as_payload()
node = payload["nodes"][0]
assert "content" in node["output_schema"]["properties"]
assert node["output_schema"]["required"] == ["content"]
async def test_service_wrapped_tool_adapter_model_validates_simple_schema_types() -> (
None
):
service = WfMcpService(store=FileStore(local_temp_root() / "adapter_model_store"))
service.register_connection(
ConnectionConfig(id="demo.personal", server="demo", account="personal")
)
service.register_adapter("demo", FakeAdapter())
await service.refresh_connection_catalog("demo.personal")
source = service.capability_sources["demo.personal"]
spec = source.capabilities.node_specs["demo.personal.echo_tool"]
assert spec.input_model.model_fields["text"].annotation is str
assert spec.output_model.model_fields["echoed"].annotation is str