File size: 1,603 Bytes
cc3cf41
 
56aba02
cc3cf41
 
 
56aba02
 
 
 
cc3cf41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56aba02
 
 
 
 
cc3cf41
56aba02
cc3cf41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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