test: migrate service async tests
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from typing import Any, cast
|
||||
|
||||
from wf_authoring import build_async_registry
|
||||
@@ -19,7 +18,7 @@ from ..test_support import (
|
||||
)
|
||||
|
||||
|
||||
def test_service_records_tool_call_events() -> None:
|
||||
async def test_service_records_tool_call_events() -> None:
|
||||
from wf_core import END, RunStatus
|
||||
|
||||
from ..test_support import input_binding, output_binding
|
||||
@@ -31,7 +30,7 @@ def test_service_records_tool_call_events() -> None:
|
||||
)
|
||||
service.register_adapter("demo", FakeAdapter())
|
||||
|
||||
asyncio.run(service.refresh_connection_catalog("demo.personal"))
|
||||
await service.refresh_connection_catalog("demo.personal")
|
||||
|
||||
plan = raw_plan(
|
||||
name="tool_event_plan",
|
||||
@@ -59,7 +58,7 @@ def test_service_records_tool_call_events() -> None:
|
||||
edges=[{"from": "echo", "outcome": "ok", "to": END}],
|
||||
)
|
||||
|
||||
run = asyncio.run(service.run_workflow_from_plan(plan, {"text": "hello"}))
|
||||
run = await service.run_workflow_from_plan(plan, {"text": "hello"})
|
||||
|
||||
assert run.status == RunStatus.COMPLETED
|
||||
tool_events = [
|
||||
@@ -73,7 +72,7 @@ def test_service_records_tool_call_events() -> None:
|
||||
assert tool_events[1].payload["outcome"] == "ok"
|
||||
|
||||
|
||||
def test_service_rejects_text_binding_for_raw_mcp_content_contract() -> None:
|
||||
async def test_service_rejects_text_binding_for_raw_mcp_content_contract() -> None:
|
||||
from wf_core import END
|
||||
|
||||
from ..test_support import input_binding, output_binding
|
||||
@@ -84,7 +83,7 @@ def test_service_rejects_text_binding_for_raw_mcp_content_contract() -> None:
|
||||
ConnectionConfig(id="demo.personal", server="demo", account="personal")
|
||||
)
|
||||
service.register_adapter("demo", ContentOnlyOutputAdapter())
|
||||
asyncio.run(service.refresh_connection_catalog("demo.personal"))
|
||||
await service.refresh_connection_catalog("demo.personal")
|
||||
plan = raw_plan(
|
||||
name="raw_content_contract",
|
||||
input_schema={
|
||||
@@ -127,14 +126,14 @@ def test_service_rejects_text_binding_for_raw_mcp_content_contract() -> None:
|
||||
)
|
||||
|
||||
|
||||
def test_service_can_inspect_resources_and_prompts() -> None:
|
||||
async def test_service_can_inspect_resources_and_prompts() -> None:
|
||||
service = WfMcpService(store=FileStore(local_temp_root() / "inspect_store"))
|
||||
service.register_connection(
|
||||
ConnectionConfig(id="demo.personal", server="demo", account="personal")
|
||||
)
|
||||
service.register_adapter("demo", FakeAdapter())
|
||||
|
||||
asyncio.run(service.refresh_connection_catalog("demo.personal"))
|
||||
await service.refresh_connection_catalog("demo.personal")
|
||||
|
||||
resources = service.list_resources(connection_id="demo.personal")
|
||||
prompts = service.list_prompts(connection_id="demo.personal")
|
||||
@@ -153,7 +152,7 @@ def test_service_can_inspect_resources_and_prompts() -> None:
|
||||
assert prompt.arguments[0]["name"] == "text"
|
||||
|
||||
|
||||
def test_service_reports_connection_statuses() -> None:
|
||||
async def test_service_reports_connection_statuses() -> None:
|
||||
import shutil
|
||||
|
||||
store = local_temp_root() / "status_store"
|
||||
@@ -180,7 +179,7 @@ def test_service_reports_connection_statuses() -> None:
|
||||
}
|
||||
]
|
||||
|
||||
asyncio.run(service.refresh_connection_catalog("demo.personal"))
|
||||
await service.refresh_connection_catalog("demo.personal")
|
||||
after = service.connection_statuses()
|
||||
assert after[0]["has_snapshot"] is True
|
||||
assert after[0]["node_count"] == 1
|
||||
@@ -188,7 +187,7 @@ def test_service_reports_connection_statuses() -> None:
|
||||
assert after[0]["prompt_count"] == 1
|
||||
|
||||
|
||||
def test_service_can_proxy_resource_reads_and_prompt_gets() -> None:
|
||||
async def test_service_can_proxy_resource_reads_and_prompt_gets() -> None:
|
||||
import shutil
|
||||
|
||||
store = local_temp_root() / "proxy_store"
|
||||
@@ -199,16 +198,12 @@ def test_service_can_proxy_resource_reads_and_prompt_gets() -> None:
|
||||
)
|
||||
service.register_adapter("demo", FakeAdapter())
|
||||
|
||||
asyncio.run(service.refresh_connection_catalog("demo.personal"))
|
||||
await service.refresh_connection_catalog("demo.personal")
|
||||
|
||||
resource_result = asyncio.run(
|
||||
service.read_resource("demo.personal.resource.welcome")
|
||||
)
|
||||
prompt_result = asyncio.run(
|
||||
service.render_prompt(
|
||||
"demo.personal.prompt.summarize",
|
||||
arguments={"text": "hello world"},
|
||||
)
|
||||
resource_result = await service.read_resource("demo.personal.resource.welcome")
|
||||
prompt_result = await service.render_prompt(
|
||||
"demo.personal.prompt.summarize",
|
||||
arguments={"text": "hello world"},
|
||||
)
|
||||
|
||||
assert (
|
||||
@@ -227,22 +222,20 @@ def test_service_can_proxy_resource_reads_and_prompt_gets() -> None:
|
||||
assert "prompt_get_completed" in event_kinds
|
||||
|
||||
|
||||
def test_service_can_invoke_raw_method_and_notification() -> None:
|
||||
async def test_service_can_invoke_raw_method_and_notification() -> None:
|
||||
service = WfMcpService(store=FileStore(local_temp_root() / "raw_store"))
|
||||
service.register_connection(
|
||||
ConnectionConfig(id="demo.personal", server="demo", account="personal")
|
||||
)
|
||||
service.register_adapter("demo", FakeAdapter())
|
||||
|
||||
result = asyncio.run(
|
||||
service.invoke_method("demo.personal", "demo.echo", params={"text": "hello"})
|
||||
result = await service.invoke_method(
|
||||
"demo.personal", "demo.echo", params={"text": "hello"}
|
||||
)
|
||||
asyncio.run(
|
||||
service.send_notification(
|
||||
"demo.personal",
|
||||
"notifications/progress",
|
||||
params={"progress": 1},
|
||||
)
|
||||
await service.send_notification(
|
||||
"demo.personal",
|
||||
"notifications/progress",
|
||||
params={"progress": 1},
|
||||
)
|
||||
|
||||
assert result == {"echoed": "hello"}
|
||||
@@ -253,7 +246,7 @@ def test_service_can_invoke_raw_method_and_notification() -> None:
|
||||
assert "raw_notification_completed" in event_kinds
|
||||
|
||||
|
||||
def test_generated_specs_use_injected_tool_executor() -> None:
|
||||
async def test_generated_specs_use_injected_tool_executor() -> None:
|
||||
class RecordingExecutor:
|
||||
def __init__(self) -> None:
|
||||
self.payloads: list[dict[str, Any]] = []
|
||||
@@ -278,21 +271,20 @@ def test_generated_specs_use_injected_tool_executor() -> None:
|
||||
)
|
||||
service.register_adapter("demo", FakeAdapter())
|
||||
|
||||
asyncio.run(service.refresh_connection_catalog("demo.personal"))
|
||||
await service.refresh_connection_catalog("demo.personal")
|
||||
spec = service._get_qualified_spec("demo.personal.echo_tool")
|
||||
handler = build_async_registry(spec)[spec.name]
|
||||
|
||||
async def run_node() -> dict[str, Any]:
|
||||
return await handler({"text": "hello"}, RuntimeContext(current_node_id="echo"))
|
||||
|
||||
result = asyncio.run(run_node())
|
||||
result = await handler(
|
||||
{"text": "hello"}, RuntimeContext(current_node_id="echo")
|
||||
)
|
||||
|
||||
assert result["outcome"] == "ok"
|
||||
assert result["output"]["echoed"] == "hello"
|
||||
assert executor.payloads == [{"text": "hello"}]
|
||||
|
||||
|
||||
def test_service_records_catalog_refresh_failures() -> None:
|
||||
async def test_service_records_catalog_refresh_failures() -> None:
|
||||
service = WfMcpService(store=FileStore(local_temp_root() / "refresh_fail_store"))
|
||||
service.register_connection(
|
||||
ConnectionConfig(id="demo.personal", server="demo", account="personal")
|
||||
@@ -300,7 +292,7 @@ def test_service_records_catalog_refresh_failures() -> None:
|
||||
service.register_adapter("demo", FailingDiscoveryAdapter())
|
||||
|
||||
try:
|
||||
asyncio.run(service.refresh_connection_catalog("demo.personal"))
|
||||
await service.refresh_connection_catalog("demo.personal")
|
||||
except PermissionError as exc:
|
||||
assert str(exc) == "Access is denied"
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user