Spaces:
Sleeping
Sleeping
| 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 | |