feat: add project-scoped operations
This commit is contained in:
@@ -1803,3 +1803,42 @@ async def test_repository_task_update_rejects_a_stale_revision():
|
||||
await repository.update_task(task)
|
||||
|
||||
assert exc.value.code == "VERSION_CONFLICT"
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_interactive_report_publication_is_idempotent_and_versioned_with_evidence():
|
||||
from tests.unit.test_report_ui import rich_report
|
||||
|
||||
now = datetime(2026, 10, 20, 8, tzinfo=timezone.utc)
|
||||
context = _context()
|
||||
task = _task_document(context, now, lease=now + timedelta(minutes=1))
|
||||
repository = RunTaskRepository(task, _active_run(task, now))
|
||||
service = OperationalTaskService(repository, context, set(), clock=lambda: now)
|
||||
report = {**rich_report(), "stage": "final"}
|
||||
command = AgentArtifactsCommand(
|
||||
request_id=uuid4(), source_session_id="session-1", report=report,
|
||||
evidence=[{"evidence_id": "demo-1", "kind": "synthetic", "summary": "演练压力记录",
|
||||
"source_label": "演练监测", "observed_at": now.isoformat()}],
|
||||
)
|
||||
first = await service.publish_artifacts(task["task_id"], command)
|
||||
replay = await service.publish_artifacts(task["task_id"], command)
|
||||
assert first.report_revision == replay.report_revision == 1
|
||||
report["ui_blocks"][0]["block"]["spec"]["elements"]["chart"]["props"]["series"][0]["data"] = [0.3, 0.29]
|
||||
await service.publish_artifacts(task["task_id"], AgentArtifactsCommand(
|
||||
request_id=uuid4(), source_session_id="session-1", report=report,
|
||||
))
|
||||
old = await service.report(task["task_id"], 1)
|
||||
latest = await service.detail(task["task_id"])
|
||||
history, _ = await service.list_reports(task["task_id"], 10, 0)
|
||||
assert old.report.ui_blocks[0].block.spec.elements["chart"].props["series"][0]["data"] == [0.3, 0.27]
|
||||
assert latest.latest_report.report.ui_blocks[0].block.spec.elements["chart"].props["series"][0]["data"] == [0.3, 0.29]
|
||||
assert [item.revision for item in history] == [2, 1]
|
||||
assert latest.latest_report.report.evidence_refs == ["demo-1"]
|
||||
assert len(repository.notifications) == 2
|
||||
report["evidence_refs"] = ["foreign"]
|
||||
report["ui_blocks"][0]["evidence_refs"] = ["foreign"]
|
||||
with pytest.raises(DomainError) as error:
|
||||
await service.publish_artifacts(task["task_id"], AgentArtifactsCommand(
|
||||
request_id=uuid4(), source_session_id="session-1", report=report,
|
||||
))
|
||||
assert error.value.code == "EVIDENCE_NOT_FOUND"
|
||||
|
||||
Reference in New Issue
Block a user