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"