razorshield-api / tests /test_risk_engine.py
Vedant Sanjay Jadhav
feat: complete RazorShield AI risk platform
10ec54c
Raw
History Blame Contribute Delete
1.58 kB
"""
test_risk_engine.py
-------------------
Unit tests for RiskDecisionEngine and end-to-end processing.
Verifies probability bounds, combined risk score, malformed input handling,
and deterministic replay.
"""
from datetime import datetime
import pytest
from src.risk_engine.decision_engine import RiskDecisionEngine
from src.risk_engine.schemas import TransactionInput
@pytest.fixture(scope="module")
def engine():
return RiskDecisionEngine(policy_mode="BALANCED")
def test_probability_bounds_and_combined_risk(engine):
tx = TransactionInput(
transaction_id="TX_TEST_01",
merchant_id="M_TEST",
event_time=datetime(2026, 1, 1, 12, 0, 0),
amount=250.0,
)
decision = engine.process_transaction(tx)
assert 0.0 <= decision.calibrated_fraud_probability <= 1.0
assert 0.0 <= decision.spike_probability <= 1.0
assert 0.0 <= decision.combined_risk_score <= 1.0
assert decision.decision in ["APPROVE", "VERIFY", "ALERT"]
def test_deterministic_replay(engine):
engine.reset_state()
tx = TransactionInput(
transaction_id="TX_DET_01",
merchant_id="M_DET",
event_time=datetime(2026, 1, 1, 12, 0, 0),
amount=150.0,
)
dec1 = engine.process_transaction(tx)
engine.reset_state()
dec2 = engine.process_transaction(tx)
assert dec1.calibrated_fraud_probability == dec2.calibrated_fraud_probability
assert dec1.spike_probability == dec2.spike_probability
assert dec1.combined_risk_score == dec2.combined_risk_score
assert dec1.decision == dec2.decision