PMFlow/backend/tests/test_pmflow_ai_turn_runtime...

37 lines
1.6 KiB
Python

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)