SaarthiAI / tests /test_risk.py
parthmax24's picture
working proto 5
8b96826
Raw
History Blame Contribute Delete
1.77 kB
"""Risk formula: deterministic, auditable, edge-case safe."""
from app.risk import clamp, compute_risk
def test_no_factors_is_low_risk():
result = compute_risk()
assert result["score"] == 0
assert result["level"] == "LOW"
def test_heavy_everything_caps_at_100():
result = compute_risk(
traffic_delay_pct=2.0, # 200% slower
rain_mm=50,
event_impact=2,
festival_impact=2,
advisory_count=10,
)
assert result["score"] == 100
assert result["level"] == "HIGH"
def test_traffic_only_moderate_delay():
# 25% slower than free flow -> 20 traffic points -> LOW
result = compute_risk(traffic_delay_pct=0.25)
assert result["breakdown"]["traffic"] == 20.0
assert result["level"] == "LOW"
def test_festival_pushes_to_medium():
# City-wide festival (Bada Mangal) + modest traffic = MEDIUM
result = compute_risk(traffic_delay_pct=0.25, festival_impact=2)
assert result["score"] == 40
assert result["level"] == "MEDIUM"
def test_rain_plus_festival_plus_traffic_is_high():
result = compute_risk(traffic_delay_pct=0.4, rain_mm=5, festival_impact=2)
# 32 + 15 + 20 = 67
assert result["score"] == 67
assert result["level"] == "HIGH"
def test_rain_points_capped_at_20():
result = compute_risk(rain_mm=100)
assert result["breakdown"]["rain"] == 20
def test_level_boundaries():
assert compute_risk(traffic_delay_pct=0.36)["level"] == "LOW" # 28.8 -> 29
assert compute_risk(traffic_delay_pct=0.38)["level"] == "MEDIUM" # 30.4 -> 30
assert compute_risk(traffic_delay_pct=0.5, festival_impact=2)["level"] == "HIGH" # 60
def test_clamp():
assert clamp(5, 0, 10) == 5
assert clamp(-1, 0, 10) == 0
assert clamp(99, 0, 10) == 10