Rutujamurkute's picture
Sync from GitHub via hub-sync
6eca01a verified
Raw
History Blame Contribute Delete
1.98 kB
"""
API tests for the deepfake detection service.
Usage:
pytest tests/test_api.py -v
"""
import io
import pytest
from fastapi.testclient import TestClient
from PIL import Image
from backend.app import app
client = TestClient(app)
def _make_test_image(size=(224, 224), color=(128, 128, 128)):
img = Image.new("RGB", size, color)
buf = io.BytesIO()
img.save(buf, format="JPEG")
buf.seek(0)
return buf
class TestHealth:
def test_health_endpoint(self):
r = client.get("/health")
assert r.status_code == 200
data = r.json()
assert data["status"] == "ok"
assert "device" in data
def test_model_info(self):
r = client.get("/model/info")
assert r.status_code == 200
data = r.json()
assert "model_type" in data
class TestImagePrediction:
def test_predict_image(self):
buf = _make_test_image()
r = client.post("/predict", files={"file": ("test.jpg", buf, "image/jpeg")})
assert r.status_code == 200
data = r.json()
assert data["label"] in ("real", "fake")
assert 0 <= data["confidence"] <= 1
assert 0 <= data["prob_real"] <= 1
assert 0 <= data["prob_fake"] <= 1
def test_predict_empty_file(self):
r = client.post("/predict", files={"file": ("empty.jpg", io.BytesIO(b""), "image/jpeg")})
assert r.status_code == 400
class TestVideoPrediction:
def test_predict_invalid_video(self):
r = client.post("/predict/video", files={"file": ("test.txt", io.BytesIO(b"not a video"), "video/mp4")})
assert r.status_code == 400
class TestBatchPrediction:
def test_predict_batch(self):
files = [("files", (f"img{i}.jpg", _make_test_image(), "image/jpeg")) for i in range(3)]
r = client.post("/predict/batch", files=files)
assert r.status_code == 200
data = r.json()
assert len(data["results"]) == 3
assert "summary" in data