credit-scoring-api-v2 / tests /test_predict_validation.py
perachon's picture
Fix model loading from HF Hub and finalize API
56aba02
Raw History Blame Contribute Delete
1.6 kB
from fastapi.testclient import TestClient
from api.main import app
import numpy as np
client = TestClient(app)
class DummyModel:
def predict_proba(self, X):
return np.array([[0.9, 0.1]])
VALID_BODY = {
"DAYS_BIRTH": -12000,
"DAYS_EMPLOYED": -2500,
"CODE_GENDER": "M",
"AMT_INCOME_TOTAL": 180000,
"AMT_CREDIT": 400000,
"AMT_ANNUITY": 20000,
"AMT_GOODS_PRICE": 350000,
"EXT_SOURCE_2": 0.65,
"EXT_SOURCE_3": 0.45,
"CREDIT_GOODS_RATIO": 1.14,
"DEBT_CREDIT_RATIO": 0.05,
"ANNUITY_INCOME_RATIO": 0.11
}
def test_predict_ok(monkeypatch):
from api import main
monkeypatch.setattr(main, "_model", DummyModel())
r = client.post("/predict", json=VALID_BODY)
assert r.status_code == 200
def test_missing_field_returns_422():
bad = dict(VALID_BODY)
bad.pop("AMT_CREDIT")
r = client.post("/predict", json=bad)
assert r.status_code == 422
def test_invalid_gender_returns_422():
bad = dict(VALID_BODY)
bad["CODE_GENDER"] = "X"
r = client.post("/predict", json=bad)
assert r.status_code == 422
def test_income_zero_returns_422():
bad = dict(VALID_BODY)
bad["AMT_INCOME_TOTAL"] = 0
r = client.post("/predict", json=bad)
assert r.status_code == 422
def test_birth_positive_returns_422():
bad = dict(VALID_BODY)
bad["DAYS_BIRTH"] = 10
r = client.post("/predict", json=bad)
assert r.status_code == 422
def test_too_young_or_age_returns_422():
bad = dict(VALID_BODY)
bad["DAYS_BIRTH"] = -10
r = client.post("/predict", json=bad)
assert r.status_code == 422