git-subtree-dir: fiscal git-subtree-mainline:d95165fc8fgit-subtree-split:102ba84500
34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
from central.app.operational_state import blocker_fingerprint, classify_product_state, should_retry_blocker, summarize_operational_states
|
|
|
|
|
|
def test_blocked_product_does_not_make_other_products_fail():
|
|
states = [
|
|
classify_product_state({"CODIGO": "1"}, {"status": "EXACT_NCM"}),
|
|
classify_product_state({"CODIGO": "2"}, {"status": "AMBIGUOUS"}),
|
|
]
|
|
|
|
summary = summarize_operational_states(states)
|
|
|
|
assert summary["COMPLETE"] == 1
|
|
assert summary["BLOCKED_CONFLICT"] == 1
|
|
assert summary["AGENT_HEALTH"] == "HEALTHY"
|
|
|
|
|
|
def test_blocker_fingerprint_deduplicates_same_input():
|
|
first = blocker_fingerprint("tenant", "company", "P1", "CFOP", "MISSING_EVIDENCE", "engine-v1")
|
|
second = blocker_fingerprint("tenant", "company", "P1", "CFOP", "MISSING_EVIDENCE", "engine-v1")
|
|
|
|
assert first == second
|
|
|
|
|
|
def test_retry_only_when_input_fingerprint_changes():
|
|
assert should_retry_blocker("old", "new") is True
|
|
assert should_retry_blocker("old", "old") is False
|
|
|
|
|
|
def test_technical_failure_is_not_healthy_when_present():
|
|
summary = summarize_operational_states([{"state": "FAILED_TECHNICAL"}])
|
|
|
|
assert summary["FAILED_TECHNICAL"] == 1
|
|
assert summary["AGENT_HEALTH"] == "DEGRADED"
|