| """ |
| Real correctness tests for core.decisions — the evidence-label -> recommendation |
| mapping and the DecisionItem dataclass. |
| """ |
| from datetime import date |
|
|
| from core.decisions import DecisionItem, recommendation_for_issue |
|
|
|
|
| def _ev(label): |
| return {"label": label, "summary": "", "truth_type": "hard_truth", "confidence": 0.85} |
|
|
|
|
| def test_inventory_drop_maps_to_replenishment_recommendation(): |
| rec = recommendation_for_issue("branch", [_ev("inventory_availability_drop")]) |
| assert "inventory" in rec.lower() |
| assert "7 days" in rec |
|
|
|
|
| def test_backlog_increase_maps_to_warehouse_capacity_review(): |
| rec = recommendation_for_issue("warehouse", [_ev("backlog_increase")]) |
| assert "warehouse capacity" in rec.lower() |
| assert "72 hours" in rec |
|
|
|
|
| def test_sla_response_increase_maps_to_service_team_review(): |
| rec = recommendation_for_issue("team", [_ev("sla_response_increase")]) |
| assert "service team" in rec.lower() |
|
|
|
|
| def test_unknown_evidence_falls_back_to_generic_owner_assignment(): |
| rec = recommendation_for_issue("process", [_ev("some_unmapped_label")]) |
| assert "operations owner" in rec.lower() |
|
|
|
|
| def test_empty_evidence_falls_back_to_generic_recommendation(): |
| rec = recommendation_for_issue("branch", []) |
| assert "operations owner" in rec.lower() |
|
|
|
|
| def test_first_matching_label_wins_when_multiple_present(): |
| |
| rec = recommendation_for_issue( |
| "warehouse", [_ev("inventory_availability_drop"), _ev("backlog_increase")] |
| ) |
| assert "inventory" in rec.lower() |
|
|
|
|
| def test_decision_item_constructs_with_defaults(): |
| item = DecisionItem( |
| decision_id="d1", |
| issue_id="i1", |
| entity_id="route_14", |
| created_at=date(2026, 5, 15), |
| title="Review route_14 drift", |
| urgency=0.8, |
| recommendation="...", |
| confidence=0.84, |
| ) |
| assert item.evidence == [] |
| assert item.status == "open" |
|
|