feat: expose draft document replacement over rpc
This commit is contained in:
@@ -413,6 +413,60 @@ async def test_rpc_draft_workspace_methods(tmp_path) -> None:
|
||||
assert artifact["result"]["artifact_id"] == "remote_artifact"
|
||||
|
||||
|
||||
async def test_rpc_replace_document_replaces_complete_draft_workspace(
|
||||
tmp_path,
|
||||
) -> None:
|
||||
server = build_local_static_workflow_server(tmp_path / "store")
|
||||
app = create_rpc_app(server)
|
||||
transport = httpx.ASGITransport(app=app)
|
||||
async with httpx.AsyncClient(transport=transport, base_url="http://test") as client:
|
||||
await _rpc(
|
||||
client,
|
||||
"workflow.draft_workspaces.create_empty",
|
||||
{"workspace_id": "report", "name": "initial"},
|
||||
)
|
||||
initial = await _rpc(
|
||||
client,
|
||||
"workflow.draft_workspaces.get",
|
||||
{"workspace_id": "report", "include_draft": True},
|
||||
)
|
||||
replacement = {**initial["result"]["draft"], "name": "replacement"}
|
||||
|
||||
replaced = await _rpc(
|
||||
client,
|
||||
"workflow.draft_workspaces.replace_document",
|
||||
{
|
||||
"workspace_id": "report",
|
||||
"revision": 1,
|
||||
"draft": replacement,
|
||||
},
|
||||
)
|
||||
inspected = await _rpc(
|
||||
client,
|
||||
"workflow.draft_workspaces.get",
|
||||
{"workspace_id": "report", "include_draft": True},
|
||||
)
|
||||
malformed = await _rpc(
|
||||
client,
|
||||
"workflow.draft_workspaces.replace_document",
|
||||
{
|
||||
"workspace_id": "report",
|
||||
"revision": 2,
|
||||
"draft": [],
|
||||
},
|
||||
)
|
||||
after_malformed = await _rpc(
|
||||
client,
|
||||
"workflow.draft_workspaces.get",
|
||||
{"workspace_id": "report", "include_draft": True},
|
||||
)
|
||||
|
||||
assert replaced["result"]["revision"] == 2
|
||||
assert inspected["result"]["draft"] == replacement
|
||||
assert malformed["error"]["code"] == -32602
|
||||
assert after_malformed["result"] == inspected["result"]
|
||||
|
||||
|
||||
async def test_rpc_draft_workspace_lifecycle_methods(tmp_path) -> None:
|
||||
server = build_local_static_workflow_server(tmp_path / "store")
|
||||
app = create_rpc_app(server)
|
||||
|
||||
@@ -399,6 +399,44 @@ async def test_rpc_client_sends_exact_draft_lifecycle_payloads() -> None:
|
||||
]
|
||||
|
||||
|
||||
async def test_rpc_client_sends_exact_replace_document_payload() -> None:
|
||||
calls: list[dict[str, Any]] = []
|
||||
|
||||
class Client(RpcDraftClientMixin):
|
||||
async def _call(self, method: str, params: dict[str, object]):
|
||||
calls.append({"method": method, "params": params})
|
||||
return {"revision": 5}
|
||||
|
||||
client = Client()
|
||||
draft = {
|
||||
"name": "report",
|
||||
"input_schema": {"type": "object", "properties": {}},
|
||||
"state_schema": {"type": "object", "properties": {}},
|
||||
"output_schema": {"type": "object", "properties": {}},
|
||||
"start": "finish",
|
||||
"steps": {"finish": {"end": {}}},
|
||||
"routes": {},
|
||||
}
|
||||
|
||||
result = await client.replace_draft_workspace_document(
|
||||
workspace_id="report",
|
||||
revision=4,
|
||||
draft=draft,
|
||||
)
|
||||
|
||||
assert result["revision"] == 5
|
||||
assert calls == [
|
||||
{
|
||||
"method": "workflow.draft_workspaces.replace_document",
|
||||
"params": {
|
||||
"workspace_id": "report",
|
||||
"revision": 4,
|
||||
"draft": draft,
|
||||
},
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
async def test_rpc_client_builds_capability_free_draft_lifecycle(tmp_path) -> None:
|
||||
server = build_local_static_workflow_server(tmp_path / "store")
|
||||
app = create_rpc_app(server)
|
||||
|
||||
Reference in New Issue
Block a user