test_p8_strategy_review_api.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from fastapi.testclient import TestClient
  2. from content_agent import api
  3. from content_agent.run_service import RunService
  4. def test_strategy_review_get_missing_is_read_only(tmp_path, monkeypatch):
  5. service = RunService(runtime_root=tmp_path / "runtime" / "v1")
  6. run_id = "run_missing_review"
  7. policy_run_id = "policy_missing_review"
  8. service.runtime.prepare_run(run_id)
  9. service.runtime.write_json(
  10. run_id,
  11. "final_output.json",
  12. _final_output(run_id, policy_run_id),
  13. )
  14. monkeypatch.setattr(api, "service", service)
  15. client = TestClient(api.app)
  16. response = client.get(f"/runs/{run_id}/strategy-review")
  17. assert response.status_code == 200
  18. data = response.json()["data"]
  19. assert data["review_status"] == "not_generated"
  20. assert data["policy_run_id"] == policy_run_id
  21. assert not (service.runtime.run_dir(run_id) / "strategy_review.json").exists()
  22. def test_strategy_review_regenerate_generates_versioned_review(tmp_path, monkeypatch):
  23. service = RunService(runtime_root=tmp_path / "runtime" / "v1")
  24. run_id = "run_regenerate_review"
  25. policy_run_id = "policy_regenerate_review"
  26. service.runtime.prepare_run(run_id)
  27. service.runtime.write_json(
  28. run_id,
  29. "final_output.json",
  30. _final_output(run_id, policy_run_id),
  31. )
  32. monkeypatch.setattr(api, "service", service)
  33. client = TestClient(api.app)
  34. response = client.post(f"/runs/{run_id}/strategy-review/regenerate")
  35. assert response.status_code == 200
  36. data = response.json()["data"]
  37. assert data["review_status"] == "generated"
  38. assert data["review_id"].startswith(f"review_{policy_run_id}_")
  39. assert data["review_id"] != f"review_{policy_run_id}"
  40. written = service.runtime.read_json(run_id, "strategy_review.json")
  41. assert written["review_id"] == data["review_id"]
  42. def _final_output(run_id: str, policy_run_id: str) -> dict:
  43. return {
  44. "schema_version": "runtime_record.v1",
  45. "run_id": run_id,
  46. "policy_run_id": policy_run_id,
  47. "policy": {"strategy_version": "V1"},
  48. "walk_strategy": {"walk_strategy_version": "V1.0"},
  49. "content_assets": [],
  50. "author_assets": [],
  51. "summary": {
  52. "search_query_count": 0,
  53. "discovered_content_count": 0,
  54. "pooled_content_count": 0,
  55. "review_content_count": 0,
  56. "rejected_content_count": 0,
  57. },
  58. }