Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from typing import AsyncGenerator | |
| from fastapi import File, Request, UploadFile | |
| from fastapi.testclient import TestClient | |
| from src.core import security | |
| from src.main import create_app | |
| from src.repository import DeviceCredentials | |
| from src.api.v1.endpoints import predict as predict_endpoint | |
| async def _fake_validated_device( | |
| request: Request, | |
| image: UploadFile = File(..., alias="image"), | |
| ) -> AsyncGenerator[DeviceCredentials, None]: | |
| request.state.image = image | |
| yield DeviceCredentials( | |
| device_id="DEV-TEST-0001", | |
| api_key="sk_test_key", | |
| secret="secret", | |
| is_active=True, | |
| ) | |
| async def _fake_inference(_image_bytes: bytes) -> dict: | |
| return { | |
| "predicted_class": "Pure Milk", | |
| "confidence": 0.9231, | |
| "model_version": "v3.0.0", | |
| "latency_ms": 12, | |
| "status": "success", | |
| } | |
| def test_core_routes_and_predict_response_shape(monkeypatch) -> None: | |
| app = create_app() | |
| app.dependency_overrides[security.get_validated_device] = _fake_validated_device | |
| monkeypatch.setattr(predict_endpoint, "run_inference", _fake_inference) | |
| with TestClient(app) as client: | |
| root = client.get("/") | |
| assert root.status_code == 200 | |
| assert root.json()["service"] == "imageO_v3" | |
| live = client.get("/healthz") | |
| assert live.status_code == 200 | |
| assert live.json() == {"status": "ok"} | |
| response = client.post( | |
| "/v1/predict", | |
| files={"image": ("sample.png", b"mock-bytes", "image/png")}, | |
| headers={"X-API-Key": "sk_test_key"}, | |
| ) | |
| assert response.status_code == 200 | |
| payload = response.json() | |
| assert set(payload.keys()) == { | |
| "predicted_class", | |
| "confidence", | |
| "model_version", | |
| "latency_ms", | |
| "status", | |
| } | |