| from __future__ import annotations |
| import pytest |
| from fastapi.testclient import TestClient |
|
|
|
|
| @pytest.fixture(scope="module") |
| def client(): |
| import sys |
| import os |
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
| from main import app |
| with TestClient(app) as c: |
| yield c |
|
|
|
|
| def test_root(client): |
| resp = client.get("/") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert data["name"] == "ReliefLensAI" |
| assert data["status"] == "ready" |
|
|
|
|
| def test_health(client): |
| resp = client.get("/health") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert data["status"] == "healthy" |
|
|
|
|
| def test_demo_scenario(client): |
| resp = client.get("/api/demo/scenario") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert "scenario_name" in data |
| assert "reports" in data |
|
|
|
|
| def test_demo_run(client): |
| resp = client.post("/api/demo/run") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert "session_id" in data |
| assert "total_incidents" in data |
| assert data["status"] == "ready" |
|
|
|
|
| def test_amd_performance(client): |
| resp = client.get("/api/amd/performance") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert "tokens_per_second" in data |
| assert data["tokens_per_second"] > 0 |
|
|
|
|
| def test_list_incidents_empty(client): |
| resp = client.get("/api/incidents") |
| assert resp.status_code == 200 |
| assert isinstance(resp.json(), list) |
|
|
|
|
| def test_get_incident_not_found(client): |
| resp = client.get("/api/incidents/nonexistent-id") |
| assert resp.status_code == 404 |
|
|
|
|
| def test_crisis_room_creation(client): |
| import uuid |
| from datetime import datetime |
| session_id = str(uuid.uuid4()) |
| payload = { |
| "batch": { |
| "session_id": session_id, |
| "scenario_name": "Test Flood", |
| "reports": [ |
| { |
| "id": str(uuid.uuid4()), |
| "session_id": session_id, |
| "report_type": "text", |
| "content": "Hay personas atrapadas en el techo de la escuela en Barrio Santa Ana, necesitamos rescate urgente", |
| "metadata": {}, |
| "created_at": datetime.utcnow().isoformat(), |
| }, |
| { |
| "id": str(uuid.uuid4()), |
| "session_id": session_id, |
| "report_type": "text", |
| "content": "Estamos bien en el centro comunitario, tenemos a 20 personas refugiadas pero falta agua", |
| "metadata": {}, |
| "created_at": datetime.utcnow().isoformat(), |
| }, |
| ], |
| } |
| } |
| resp = client.post("/api/crisis-room", json=payload) |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert data["session_id"] == session_id |
| assert data["total_incidents"] > 0 |
| assert data["status"] == "ready" |
|
|