53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import asyncio
|
|
|
|
from examples.mcp_workflow_surface import (
|
|
build_echo_draft,
|
|
create_and_run_echo_deployment,
|
|
prepare_demo_service,
|
|
)
|
|
from examples.mcp_wrapper_authoring_flow import author_echo_wrapper_from_capability
|
|
|
|
|
|
def test_mcp_workflow_surface_example_discovers_ok_and_error_outcomes(
|
|
tmp_path,
|
|
) -> None:
|
|
service = asyncio.run(prepare_demo_service(tmp_path))
|
|
|
|
source = service.inspect_source("demo.personal")
|
|
node_spec = source["capabilities"]["node_spec_details"][0]
|
|
|
|
assert node_spec["name"] == "demo.personal.echo_tool"
|
|
assert node_spec["outcomes"] == ["ok", "error"]
|
|
|
|
|
|
def test_mcp_workflow_surface_example_wires_naive_error_outcome() -> None:
|
|
draft = build_echo_draft()
|
|
|
|
assert draft["routes"]["echo"]["ok"] == "__end__"
|
|
assert draft["routes"]["echo"]["error"] == "tool_error"
|
|
assert draft["steps"]["tool_error"]["use"] == "wf.std.runtime_error"
|
|
|
|
|
|
def test_mcp_workflow_surface_example_runs_happy_path(tmp_path) -> None:
|
|
payload = asyncio.run(create_and_run_echo_deployment(tmp_path, text="hello"))
|
|
|
|
assert payload["status"] == "completed"
|
|
output = payload["output"]
|
|
assert output is not None
|
|
assert output["echoed"] == "hello"
|
|
assert payload["diagnostics"] == []
|
|
|
|
|
|
def test_mcp_wrapper_authoring_flow_example_creates_and_calls_wrapper(tmp_path) -> None:
|
|
payload = asyncio.run(author_echo_wrapper_from_capability(tmp_path))
|
|
|
|
assert payload["inspected_hints"]["capability_name"] == "demo.personal.echo_tool"
|
|
assert payload["workspace"]["status"] == "valid"
|
|
assert payload["created"]["saved"] is True
|
|
assert payload["called"]["qualified_name"] == "workflow.echo_wrapper.v1"
|
|
assert payload["called"]["kind"] == "wrapper_artifact"
|
|
assert payload["called"]["outcome"] == "completed"
|
|
assert payload["called"]["output"]["echoed"] == "hello"
|