test: cover invalid intermediate draft routes
This commit is contained in:
@@ -1101,3 +1101,50 @@ async def test_add_step_persists_invalid_forward_route(tmp_path: Path) -> None:
|
|||||||
)
|
)
|
||||||
assert stored["draft"]["steps"]["wait"]["use"] == "local.browser_click.wait_for_click"
|
assert stored["draft"]["steps"]["wait"]["use"] == "local.browser_click.wait_for_click"
|
||||||
assert stored["draft"]["routes"]["wait"]["ok"] == "collect"
|
assert stored["draft"]["routes"]["wait"]["ok"] == "collect"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_invalid_forward_route_cannot_compile_or_save(tmp_path: Path) -> None:
|
||||||
|
api, _service = _browser_click_api(
|
||||||
|
FileWorkflowArtifactStore(tmp_path / "drafts_compile_boundary")
|
||||||
|
)
|
||||||
|
|
||||||
|
await api.create_draft_workspace_from_capability(
|
||||||
|
workspace_id="browser",
|
||||||
|
capability_name="local.browser_click.open_click_page",
|
||||||
|
name="browser",
|
||||||
|
)
|
||||||
|
|
||||||
|
await api.add_step_from_capability(
|
||||||
|
workspace_id="browser",
|
||||||
|
revision=1,
|
||||||
|
step_id="wait",
|
||||||
|
capability_name="local.browser_click.wait_for_click",
|
||||||
|
route_from_step="call",
|
||||||
|
routes={"ok": "collect"},
|
||||||
|
input_map={"state.session_id": "session_id"},
|
||||||
|
bind_outputs={"after": "state.after"},
|
||||||
|
)
|
||||||
|
|
||||||
|
compiled = await api.compile_draft_workspace(workspace_id="browser")
|
||||||
|
|
||||||
|
assert compiled["status"] == "invalid"
|
||||||
|
assert any(
|
||||||
|
item["code"] == "unknown_edge_destination"
|
||||||
|
for item in compiled["diagnostics"]
|
||||||
|
)
|
||||||
|
|
||||||
|
saved = await api.create_artifact_from_workspace(
|
||||||
|
workspace_id="browser",
|
||||||
|
artifact_id="browser_workflow",
|
||||||
|
version=1,
|
||||||
|
title="Browser Workflow",
|
||||||
|
outcomes=["ok"],
|
||||||
|
)
|
||||||
|
|
||||||
|
assert saved["status"] == "invalid"
|
||||||
|
assert saved["saved"] is False
|
||||||
|
assert any(
|
||||||
|
item["code"] == "unknown_edge_destination"
|
||||||
|
for item in saved["diagnostics"]
|
||||||
|
)
|
||||||
|
|||||||
@@ -1362,3 +1362,56 @@ def test_wf_deploy_create_alias_saves_deployment(monkeypatch, tmp_path) -> None:
|
|||||||
assert created.exit_code == 0, created.output
|
assert created.exit_code == 0, created.output
|
||||||
payload = json.loads(created.output)
|
payload = json.loads(created.output)
|
||||||
assert payload["deployment_id"] == "alias_artifact.default"
|
assert payload["deployment_id"] == "alias_artifact.default"
|
||||||
|
|
||||||
|
|
||||||
|
def test_wf_draft_forward_route_invalid_via_rpc(monkeypatch, tmp_path) -> None:
|
||||||
|
server = build_local_static_workflow_server(tmp_path / "store")
|
||||||
|
_patch_rpc_client_to_server(monkeypatch, server)
|
||||||
|
config_path = tmp_path / "wf.json"
|
||||||
|
config_path.write_text('{"version": 1}', encoding="utf-8")
|
||||||
|
runner = CliRunner()
|
||||||
|
base_args = ["--config", str(config_path), "--url", "http://test/rpc"]
|
||||||
|
|
||||||
|
created = runner.invoke(
|
||||||
|
app,
|
||||||
|
[
|
||||||
|
*base_args,
|
||||||
|
"draft",
|
||||||
|
"create",
|
||||||
|
"fwd_ws",
|
||||||
|
"--capability",
|
||||||
|
"wf.std.constant",
|
||||||
|
"--name",
|
||||||
|
"forward_route",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
assert created.exit_code == 0, created.output
|
||||||
|
|
||||||
|
result = runner.invoke(
|
||||||
|
app,
|
||||||
|
[
|
||||||
|
*base_args,
|
||||||
|
"draft",
|
||||||
|
"add-step",
|
||||||
|
"fwd_ws",
|
||||||
|
"--revision",
|
||||||
|
"1",
|
||||||
|
"--step",
|
||||||
|
"second",
|
||||||
|
"--capability",
|
||||||
|
"wf.std.constant",
|
||||||
|
"--from-step",
|
||||||
|
"call",
|
||||||
|
"--route",
|
||||||
|
"ok=missing",
|
||||||
|
"--input",
|
||||||
|
"input.value=value",
|
||||||
|
"--bind-output",
|
||||||
|
"value=state.val",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
assert result.exit_code == 0, result.output
|
||||||
|
payload = json.loads(result.output)
|
||||||
|
assert payload["status"] == "invalid"
|
||||||
|
assert payload["revision"] == 2
|
||||||
|
|||||||
Reference in New Issue
Block a user