type: narrow example and authoring test payloads

This commit is contained in:
lda
2026-08-29 18:44:39 +07:00 Verified
parent 76bba33a64
commit bda0360513
2 changed files with 39 additions and 21 deletions
@@ -240,23 +240,31 @@ async def test_lda_report_workflow_artifact_interrupt_resume_path(
)
assert started["status"] == "interrupted"
assert started["interrupt"]["kind"] == "issue_review"
assert started["interrupt"]["typed"] is True
assert set(started["interrupt"]["request_schema"]["required"]) == {
interrupt = started["interrupt"]
assert interrupt is not None
assert interrupt["kind"] == "issue_review"
assert interrupt["typed"] is True
request_required = interrupt["request_schema"].get("required")
assert isinstance(request_required, list)
assert set(request_required) == {
"report_markdown",
"proposed_issues",
}
assert set(started["interrupt"]["resume_schema"]["required"]) == {
resume_required = interrupt["resume_schema"].get("required")
assert isinstance(resume_required, list)
assert set(resume_required) == {
"approved",
"selected_issue_ids",
}
proposed_ids = [
issue["id"] for issue in started["interrupt"]["payload"]["proposed_issues"]
issue["id"] for issue in interrupt["payload"]["proposed_issues"]
]
assert proposed_ids
started_run_id = started["run_id"]
assert isinstance(started_run_id, str)
resumed = await server.api.resume_run(
run_id=started["run_id"],
run_id=started_run_id,
resume_payload={
"approved": True,
"selected_issue_ids": proposed_ids[:2],
@@ -267,10 +275,12 @@ async def test_lda_report_workflow_artifact_interrupt_resume_path(
assert resumed["status"] == "completed"
assert resumed["outcome"] == "completed"
assert resumed["output"]["approved"] is True
assert resumed["output"]["created_issues"]
assert resumed["output"]["created_issues"][0]["id"] == "ISSUE-001"
assert resumed["output"]["markdown"].startswith(
output = resumed["output"]
assert output is not None
assert output["approved"] is True
assert output["created_issues"]
assert output["created_issues"][0]["id"] == "ISSUE-001"
assert output["markdown"].startswith(
"# lda.chat Thesis And Project Readiness Report"
)
@@ -312,9 +322,11 @@ async def test_lda_report_workflow_cancelled_resume_path(tmp_path: Path) -> None
deployment_id="lda_report_cancel_case.default",
workflow_input=run_input,
)
started_run_id = started["run_id"]
assert isinstance(started_run_id, str)
resumed = await server.api.resume_run(
run_id=started["run_id"],
run_id=started_run_id,
resume_payload={
"approved": False,
"selected_issue_ids": [],
@@ -325,5 +337,7 @@ async def test_lda_report_workflow_cancelled_resume_path(tmp_path: Path) -> None
assert resumed["status"] == "completed"
assert resumed["outcome"] == "cancelled"
assert resumed["output"]["approved"] is False
assert "Revision Requested" in resumed["output"]["markdown"]
output = resumed["output"]
assert output is not None
assert output["approved"] is False
assert "Revision Requested" in output["markdown"]
+12 -8
View File
@@ -6,6 +6,7 @@ from wf_api.authoring_contracts import (
project_authoring_step_contract,
schema_path_options,
)
from wf_api.models import AuthoringPathOptionPayload, AuthoringStepContractPayload
def test_schema_path_options_is_parent_first_and_schema_derived() -> None:
@@ -255,7 +256,7 @@ def test_schema_path_options_returns_empty_schema_for_unconstrained_property() -
def test_project_authoring_contract_inventory_composes_pure_inputs() -> None:
context_entry = {
context_entry: AuthoringPathOptionPayload = {
"path": "context.loop_item",
"label": "Loop Item",
"origin": "runtime_context",
@@ -265,7 +266,7 @@ def test_project_authoring_contract_inventory_composes_pure_inputs() -> None:
"uses": ["step_input"],
"reason": "Only available inside the foreach body.",
}
step_input_target = {
step_input_target: AuthoringPathOptionPayload = {
"path": "step.input.query",
"label": "Query",
"origin": "step_input",
@@ -274,7 +275,7 @@ def test_project_authoring_contract_inventory_composes_pure_inputs() -> None:
"availability": "available",
"uses": ["step_input"],
}
step_output_source = {
step_output_source: AuthoringPathOptionPayload = {
"path": "step.output.answer",
"label": "Answer",
"origin": "step_output",
@@ -283,7 +284,7 @@ def test_project_authoring_contract_inventory_composes_pure_inputs() -> None:
"availability": "available",
"uses": ["step_output_source", "workflow_output"],
}
entry_step = {
entry_step: AuthoringStepContractPayload = {
"step_id": "fetch",
"label": "Fetch",
}
@@ -372,8 +373,10 @@ def test_authoring_paths_exclude_incompatible_binding_roles() -> None:
state_source = inventory["readable_sources"][0]
assert state_source["path"] == "state.answer"
assert "step_output_source" not in state_source["uses"]
assert step_contract["output_sources"][0]["path"] == "step_output.answer"
assert "workflow_output" not in step_contract["output_sources"][0]["uses"]
output_sources = step_contract.get("output_sources")
assert output_sources is not None
assert output_sources[0]["path"] == "step_output.answer"
assert "workflow_output" not in output_sources[0]["uses"]
def test_context_path_options_are_step_input_only() -> None:
@@ -393,11 +396,12 @@ def test_context_path_options_are_step_input_only() -> None:
assert options[0]["origin"] == "runtime_context"
assert options[0]["uses"] == ["step_input"]
assert options[0]["availability"] == "conditional"
assert options[0]["reason"] == "Only available inside the foreach body."
reason = options[0].get("reason")
assert reason == "Only available inside the foreach body."
def test_project_inventory_does_not_offer_context_for_workflow_output() -> None:
context_entry = {
context_entry: AuthoringPathOptionPayload = {
"path": "context.item",
"label": "Item",
"origin": "runtime_context",