| """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 |
|
|