Spaces:
Sleeping
Sleeping
| from io import BytesIO | |
| from fastapi.testclient import TestClient | |
| from PIL import Image | |
| from app.main import app | |
| def test_upload_analysis_flow_returns_completed_result() -> None: | |
| image = Image.new("RGB", (64, 64), "white") | |
| output = BytesIO() | |
| image.save(output, format="PNG") | |
| with TestClient(app) as client: | |
| response = client.post( | |
| "/analyses", | |
| data={"consent_confirmed": "true"}, | |
| files={"file": ("test.png", output.getvalue(), "image/png")}, | |
| ) | |
| assert response.status_code == 202 | |
| analysis_id = response.json()["id"] | |
| result_response = client.get(f"/analyses/{analysis_id}") | |
| assert result_response.status_code == 200 | |
| payload = result_response.json() | |
| assert payload["status"] == "completed" | |
| assert payload["result"]["verdict"]["label"] in { | |
| "inconclusive", | |
| "likely_real", | |
| "likely_manipulated_or_deepfake", | |
| "likely_ai_generated", | |
| } | |
| report_response = client.get(f"/analyses/{analysis_id}/report?format=pdf") | |
| assert report_response.status_code == 200 | |
| assert report_response.content.startswith(b"%PDF") | |
| def test_security_headers_are_present() -> None: | |
| with TestClient(app) as client: | |
| response = client.get("/health") | |
| assert response.status_code == 200 | |
| assert response.headers["x-content-type-options"] == "nosniff" | |
| assert response.headers["referrer-policy"] == "no-referrer" | |
| assert response.headers["x-frame-options"] == "DENY" | |
| def test_ready_and_metrics_endpoints() -> None: | |
| with TestClient(app) as client: | |
| ready = client.get("/ready") | |
| metrics = client.get("/metrics") | |
| assert ready.status_code == 200 | |
| assert ready.json()["checks"]["database"] == "ok" | |
| assert metrics.status_code == 200 | |
| assert "aida_http_requests_total" in metrics.text | |
| def test_analysis_can_be_deleted_early() -> None: | |
| image = Image.new("RGB", (64, 64), "white") | |
| output = BytesIO() | |
| image.save(output, format="PNG") | |
| with TestClient(app) as client: | |
| response = client.post( | |
| "/analyses", | |
| data={"consent_confirmed": "true"}, | |
| files={"file": ("test.png", output.getvalue(), "image/png")}, | |
| ) | |
| analysis_id = response.json()["id"] | |
| delete_response = client.delete(f"/analyses/{analysis_id}") | |
| assert delete_response.status_code == 204 | |
| get_response = client.get(f"/analyses/{analysis_id}") | |
| assert get_response.status_code == 404 | |