from __future__ import annotations from app.config.pmflow_ai_turn_runtime_golden_cases import PMFLOW_AI_TURN_RUNTIME_GOLDEN_CASES from app.services.pmflow_ai_turn_runtime_golden_replay import PMFlowAITurnRuntimeGoldenReplay def test_turn_runtime_golden_replay_covers_cross_scene_behavior() -> None: case_ids = {case["case_id"] for case in PMFLOW_AI_TURN_RUNTIME_GOLDEN_CASES} assert len(case_ids) >= 20 assert { "open_purchase_supervision_direction", "specific_project_status", "ambiguous_execute_request", "open_comic_tool_direction", "multi_task_project_review", "followup_ai_trading_idea", "recommend_new_project_directions", }.issubset(case_ids) def test_turn_runtime_golden_replay_passes_behavior_contracts() -> None: results = PMFlowAITurnRuntimeGoldenReplay(object(), tenant_id=1).run_all() failures = {item.case_id: item.failures for item in results if not item.passed} assert failures == {} def test_turn_runtime_golden_replay_is_not_text_snapshot_or_route_enum_test() -> None: results = PMFlowAITurnRuntimeGoldenReplay(object(), tenant_id=1).run_all() assert all("route_hypothesis_only" in item.observed for item in results) assert any(item.observed["next_action"] == "external_search" for item in results) assert any(item.observed["next_action"] == "inspect_project_status" for item in results) assert any(item.observed["next_action"] == "ask_clarification" for item in results) assert any(item.observed["answer_shape"] == "composite_answer" for item in results)