"""Unit tests for the prescreen routing decision logic.""" from __future__ import annotations import pytest from contract_check.worker_prescreen.extractor import PrescreenContractMeta from contract_check.worker_prescreen.router import PrescreenRouter @pytest.fixture def router() -> PrescreenRouter: return PrescreenRouter( confidence_threshold=0.75, high_value_threshold=100_000.0, auto_approve_enabled=False, ) @pytest.fixture def complete_meta() -> PrescreenContractMeta: return PrescreenContractMeta( contract_type="supply", party_a="ООО «А»", party_b="ООО «Б»", total_amount=50000.0, currency="RUB", start_date="2025-01-01", end_date="2025-12-31", has_penalty_clause=False, has_termination_clause=False, has_arbitration=False, confidence_score=0.8, ) def test_high_value_routes_to_deep_analysis( router: PrescreenRouter, complete_meta: PrescreenContractMeta ) -> None: complete_meta.total_amount = 250_000.0 assert router.decide(complete_meta) == "deep_analysis" def test_penalty_clause_routes_to_deep_analysis( router: PrescreenRouter, complete_meta: PrescreenContractMeta ) -> None: complete_meta.has_penalty_clause = True assert router.decide(complete_meta) == "deep_analysis" def test_arbitration_routes_to_deep_analysis( router: PrescreenRouter, complete_meta: PrescreenContractMeta ) -> None: complete_meta.has_arbitration = True assert router.decide(complete_meta) == "deep_analysis" def test_low_confidence_routes_to_manual_review( router: PrescreenRouter, complete_meta: PrescreenContractMeta ) -> None: complete_meta.confidence_score = 0.5 assert router.decide(complete_meta) == "manual_review" def test_missing_party_routes_to_manual_review( router: PrescreenRouter, complete_meta: PrescreenContractMeta ) -> None: complete_meta.party_b = None assert router.decide(complete_meta) == "manual_review" def test_auto_approve_disabled_by_default( router: PrescreenRouter, complete_meta: PrescreenContractMeta ) -> None: # Low value, no risk clauses, high confidence — but auto_approve is off. assert router.decide(complete_meta) == "manual_review" def test_auto_approve_when_enabled(complete_meta: PrescreenContractMeta) -> None: enabled_router = PrescreenRouter( confidence_threshold=0.75, high_value_threshold=100_000.0, auto_approve_enabled=True, ) assert enabled_router.decide(complete_meta) == "auto_approve" def test_summarize_returns_non_empty_string( router: PrescreenRouter, complete_meta: PrescreenContractMeta ) -> None: summary = router.summarize(complete_meta, "auto_approve") assert "supply" in summary assert "ООО «А»" in summary assert "50000" in summary