94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
"""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
|