fix via review findings
This commit is contained in:
@@ -520,8 +520,8 @@ def test_adapter_lowers_typed_and_untyped_interrupt_steps() -> None:
|
||||
|
||||
workflow = build_workflow_from_draft(draft)
|
||||
|
||||
review = workflow.nodes[0]
|
||||
legacy = workflow.nodes[1]
|
||||
review = next(node for node in workflow.nodes if node.id == "review")
|
||||
legacy = next(node for node in workflow.nodes if node.id == "legacy")
|
||||
assert isinstance(review, InterruptNode)
|
||||
assert review.request_schema == request_schema
|
||||
assert review.resume_schema == resume_schema
|
||||
@@ -570,6 +570,12 @@ def test_adapter_lowers_subgraph_step_without_resolving_artifact() -> None:
|
||||
assert child.workflow.version == 2
|
||||
assert child.input_schema == SchemaRef.model_validate(input_schema)
|
||||
assert child.output_schema == SchemaRef.model_validate(output_schema)
|
||||
assert child.model_dump(mode="json", by_alias=True)["input"] == [
|
||||
{"path": "state.topic", "target": "topic"}
|
||||
]
|
||||
assert child.model_dump(mode="json", by_alias=True)["output"] == [
|
||||
{"source": "report", "target": "state.report"}
|
||||
]
|
||||
assert child.outcomes == ["ok", "error"]
|
||||
|
||||
|
||||
|
||||
@@ -3,11 +3,13 @@ from __future__ import annotations
|
||||
from typing import Any
|
||||
|
||||
from wf_artifacts import (
|
||||
DraftWorkspaceStore,
|
||||
FileDraftWorkspaceStore,
|
||||
WorkflowDraftWorkspace,
|
||||
create_draft_workspace,
|
||||
get_draft_workspace,
|
||||
patch_draft_workspace,
|
||||
replace_validated_draft_document,
|
||||
summarize_draft_workspace,
|
||||
)
|
||||
|
||||
@@ -252,6 +254,44 @@ def test_patch_draft_workspace_rejects_invalid_patch_without_revision_bump(
|
||||
assert store.get_workspace("echo_draft").revision == 1
|
||||
|
||||
|
||||
def test_replace_validated_draft_document_isolates_persisted_draft() -> None:
|
||||
class ReferenceDraftWorkspaceStore(DraftWorkspaceStore):
|
||||
def __init__(self) -> None:
|
||||
self.workspace: WorkflowDraftWorkspace | None = None
|
||||
|
||||
def save_workspace(self, workspace: WorkflowDraftWorkspace) -> None:
|
||||
self.workspace = workspace
|
||||
|
||||
def get_workspace(self, workspace_id: str) -> WorkflowDraftWorkspace:
|
||||
if self.workspace is None or self.workspace.id != workspace_id:
|
||||
raise KeyError(workspace_id)
|
||||
return self.workspace
|
||||
|
||||
def list_workspaces(self) -> list[WorkflowDraftWorkspace]:
|
||||
return [] if self.workspace is None else [self.workspace]
|
||||
|
||||
def delete_workspace(self, workspace_id: str) -> bool:
|
||||
if self.workspace is None or self.workspace.id != workspace_id:
|
||||
return False
|
||||
self.workspace = None
|
||||
return True
|
||||
|
||||
store = ReferenceDraftWorkspaceStore()
|
||||
create_draft_workspace(store, workspace_id="echo_draft", draft=_draft())
|
||||
replacement = _draft()
|
||||
replacement["name"] = "replacement"
|
||||
|
||||
replace_validated_draft_document(
|
||||
store,
|
||||
workspace_id="echo_draft",
|
||||
revision=1,
|
||||
draft=replacement,
|
||||
)
|
||||
replacement["name"] = "mutated_after_save"
|
||||
|
||||
assert store.get_workspace("echo_draft").draft["name"] == "replacement"
|
||||
|
||||
|
||||
def test_get_draft_workspace_includes_full_draft_only_when_requested(tmp_path) -> None:
|
||||
store = FileDraftWorkspaceStore(tmp_path)
|
||||
create_draft_workspace(store, workspace_id="echo_draft", draft=_draft())
|
||||
|
||||
Reference in New Issue
Block a user