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