credit-scoring-api-v2 / tests /test_predict_validation.py
perachon's picture
Fix model loading from HF Hub and finalize API
56aba02
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