DealDocumentScreening/tests/unit/test_prescreen_router.py
2026-08-17 20:49:29 +03:00

94 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""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