imageO-ViT / tests /test_api_contract.py
github-actions[bot]
Deploy latest changes from main branch
ee54f79
Raw
History Blame
1.9 kB
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",
}