test_v4_m6_e2e_acceptance.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from content_agent.run_service import RunService
  2. from content_agent.schemas import RunStartRequest
  3. from tests.gemini_helpers import FakeGeminiVideoClient
  4. from tests.p1_helpers import FakeQueryVariantClient, REAL_SOURCE_FIXTURE
  5. def test_v4_m6_controlled_e2e_builds_complete_runtime_without_external_clients(tmp_path):
  6. query_client = FakeQueryVariantClient({"爱国情感": "不应该调用"})
  7. gemini_client = FakeGeminiVideoClient()
  8. service = RunService(
  9. runtime_root=tmp_path / "runtime" / "v1",
  10. query_variant_client=query_client,
  11. gemini_video_client=gemini_client,
  12. )
  13. state = service.start_run(
  14. RunStartRequest(platform_mode="mock", source=str(REAL_SOURCE_FIXTURE), strategy_version="V4")
  15. )
  16. run_id = state["run_id"]
  17. assert state["status"] == "success"
  18. assert query_client.calls == []
  19. assert gemini_client.calls
  20. search_queries = service.read_jsonl(run_id, "search_queries.jsonl")
  21. content_items = service.read_jsonl(run_id, "discovered_content_items.jsonl")
  22. media_records = service.read_jsonl(run_id, "content_media_records.jsonl")
  23. recall_evidence = service.read_jsonl(run_id, "pattern_recall_evidence.jsonl")
  24. rule_decisions = service.read_jsonl(run_id, "rule_decisions.jsonl")
  25. walk_actions = service.read_jsonl(run_id, "walk_actions.jsonl")
  26. source_paths = service.read_jsonl(run_id, "source_path_records.jsonl")
  27. search_clues = service.read_jsonl(run_id, "search_clues.jsonl")
  28. final_output = service.read_json(run_id, "final_output.json")
  29. strategy_review = service.read_json(run_id, "strategy_review.json")
  30. assert {"query_seed_point"} <= {
  31. row["search_query_generation_method"] for row in search_queries
  32. }
  33. assert "llm_variant" not in {row["search_query_generation_method"] for row in search_queries}
  34. assert content_items
  35. assert media_records
  36. assert recall_evidence
  37. assert rule_decisions
  38. assert walk_actions
  39. assert source_paths
  40. assert search_clues
  41. assert final_output["policy"]["strategy_version"] == "V4"
  42. assert strategy_review["schema_version"] == "runtime_record.v1"
  43. assert all(row["scorecard"]["schema_version"] == "v4_scorecard.v1" for row in rule_decisions)
  44. assert all("allow_walk" in row["decision_replay_data"] for row in rule_decisions)
  45. assert any(path["source_path_type"] == "pattern_to_search_query" for path in source_paths)
  46. validation = service.validate_run(run_id)
  47. assert validation["status"] == "pass", validation["findings"]