Files
DocsGPT/tests/agents/test_workflow_engine_structured_recovery.py
T
Alex 5a87fa6258 Add document I/O to workflows and surface run artifacts
Let workflow runs consume and produce documents end to end: bridge uploaded
attachments into run-scoped artifacts so nodes receive the input documents
(with a per-run cap and server-computed size/sha256, and the run row pre-created
so produced artifacts are authorized during the run); emit the run id to the
client and add a builder panel that lists, previews, and downloads a run's
artifacts; and allow attaching documents to a Preview run via the existing
upload flow.

Also fixes issues a compliance workflow surfaced: attachment ownership now keys
on the raw identity instead of a sanitized one (the sanitized form could not be
read back and could collide across users); workflow code nodes read prior state
from a state.json data file instead of templating it into the program, so
untrusted document content can never be interpolated into executed code;
structured node output wrapped in code fences is recovered; and the live
speech-to-text ownership check compares the raw identity.
2026-06-24 22:50:37 +01:00

45 lines
1.4 KiB
Python

"""Engine robustness: fenced/prose structured output recovery in _parse_structured_output."""
from __future__ import annotations
from application.agents.workflows.workflow_engine import WorkflowEngine
def _engine() -> WorkflowEngine:
return WorkflowEngine.__new__(WorkflowEngine)
def test_parse_structured_output_bare_json():
ok, val = _engine()._parse_structured_output('{"x": true}')
assert ok and val == {"x": True}
def test_parse_structured_output_json_fence():
ok, val = _engine()._parse_structured_output('```json\n{"a": 1, "b": null}\n```')
assert ok and val == {"a": 1, "b": None}
def test_parse_structured_output_unlabelled_fence():
ok, val = _engine()._parse_structured_output("text\n```\n{\"y\": [1, 2]}\n```\nmore")
assert ok and val == {"y": [1, 2]}
def test_parse_structured_output_prose_wrapped_object():
ok, val = _engine()._parse_structured_output('Result: {"z": "v"} done')
assert ok and val == {"z": "v"}
def test_parse_structured_output_non_json():
ok, val = _engine()._parse_structured_output("not json at all")
assert ok is False and val is None
def test_parse_structured_output_empty():
ok, val = _engine()._parse_structured_output(" ")
assert ok is False and val is None
def test_strip_json_fence_prefers_fence_over_braces():
out = WorkflowEngine._strip_json_fence('lead {"outer": 1} ```json\n{"in": 2}\n```')
assert out == '{"in": 2}'