File size: 1,665 Bytes
5d4dc71 ac781dd 5d4dc71 | 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 | """Integration test for POST /fusion/predict."""
from __future__ import annotations
from fastapi.testclient import TestClient
from src.api.main import app
client = TestClient(app)
class TestFusionRoute:
def test_happy_path_mri_only(self) -> None:
body = {
"mri": {
"label_text": "alzheimers",
"label": 1,
"confidence": 0.88,
"probabilities": [
{"label_text": "control", "probability": 0.12},
{"label_text": "alzheimers", "probability": 0.88},
],
},
}
r = client.post("/fusion/predict", json=body)
assert r.status_code == 200, r.text
data = r.json()
assert "diseases" in data
assert any(d["disease"] == "alzheimers" for d in data["diseases"])
assert data["top_disease"] in {"alzheimers", "parkinsons", "other"}
def test_empty_input_returns_baseline(self) -> None:
r = client.post("/fusion/predict", json={})
assert r.status_code == 200
data = r.json()
for d in data["diseases"]:
assert abs(d["probability"] - 0.5) < 1e-6
assert "mri" in data["missing_inputs"]
assert data["top_disease"] is None
def test_invalid_probability_returns_422(self) -> None:
body = {
"mri": {
"label_text": "x",
"label": 0,
"confidence": 1.5,
"probabilities": [{"label_text": "x", "probability": 1.5}],
},
}
r = client.post("/fusion/predict", json=body)
assert r.status_code == 422
|