hackathon / tests /api /test_fusion_route.py
mekosotto's picture
fix(fusion): correct logit-scale comment; top_disease=None on empty input
ac781dd
"""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