test_p7_final_output.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import json
  2. from content_agent.run_service import RunService
  3. from content_agent.schemas import RunStartRequest
  4. from tests.p1_helpers import FakeQueryVariantClient, REAL_SOURCE_FIXTURE
  5. def _start_mock_run(tmp_path):
  6. service = RunService(
  7. runtime_root=tmp_path / "runtime" / "v1",
  8. query_variant_client=FakeQueryVariantClient(),
  9. )
  10. state = service.start_run(
  11. RunStartRequest(platform_mode="mock", source=str(REAL_SOURCE_FIXTURE))
  12. )
  13. assert state["status"] == "success"
  14. return service, state["run_id"]
  15. def test_keep_content_for_review_is_visible_but_not_pooled(tmp_path):
  16. service, run_id = _start_mock_run(tmp_path)
  17. final_output = service.read_json(run_id, "final_output.json")
  18. content_ids = {asset["platform_content_id"] for asset in final_output["content_assets"]}
  19. review_ids = {record["platform_content_id"] for record in final_output["review_records"]}
  20. assert final_output["summary"]["review_content_count"] == len(final_output["review_records"])
  21. assert review_ids
  22. assert not review_ids & content_ids
  23. assert {record["review_status"] for record in final_output["review_records"]} == {
  24. "pending_review"
  25. }
  26. assert {record["final_asset_status"] for record in final_output["review_records"]} == {
  27. "review_only"
  28. }
  29. assert final_output["validation_status"] == "pass"
  30. assert final_output["summary"]["run_path_complete"] is True
  31. assert final_output["summary"]["trace_complete"] is True
  32. def test_review_record_path_refs_are_validated(tmp_path):
  33. service, run_id = _start_mock_run(tmp_path)
  34. final_output_path = service.runtime.run_dir(run_id) / "final_output.json"
  35. final_output = json.loads(final_output_path.read_text(encoding="utf-8"))
  36. final_output["review_records"][0]["source_path_record_ids"] = ["missing_path"]
  37. final_output_path.write_text(
  38. json.dumps(final_output, ensure_ascii=False, indent=2) + "\n",
  39. encoding="utf-8",
  40. )
  41. validation = service.validate_run(run_id)
  42. assert validation["status"] == "fail"
  43. assert any(finding["check_id"] == "missing_path_ref" for finding in validation["findings"])
  44. assert any(
  45. finding["check_id"] == "completeness_mismatch"
  46. for finding in validation["findings"]
  47. )
  48. def test_run_service_rewrites_final_output_with_final_validation_status(tmp_path):
  49. service, run_id = _start_mock_run(tmp_path)
  50. final_output = service.read_json(run_id, "final_output.json")
  51. validation = service.validate_run(run_id)
  52. assert validation["status"] == "pass"
  53. assert final_output["validation_status"] == validation["status"]
  54. assert final_output["summary"]["run_path_complete"] is True
  55. assert final_output["summary"]["trace_complete"] is True