FaceCheck / tests /conftest.py
Mukhammadali Bakhodirov
Deploy detection fixes
9b5157d
"""
Pytest fixtures for the photo verification API.
Uses dependency_overrides so tests run without loading 300MB of model weights.
"""
import numpy as np
import pytest
from fastapi.testclient import TestClient
from app.main import create_app
from app.services.face_analysis import FaceAnalysisService, FaceAnalysis
from app.services.liveness import LivenessService, LivenessResult
from app.core.dependencies import run_in_cv_executor
class _MockFaceService(FaceAnalysisService):
def __init__(self, result: FaceAnalysis):
super().__init__()
self._loaded = True
self._result = result
def analyze(self, image_bgr):
return self._result
class _MockLivenessService(LivenessService):
def __init__(self, result: LivenessResult):
super().__init__()
self._loaded = True
self._result = result
def check(self, image_bgr, face_bbox=None):
return self._result
@pytest.fixture
def verified_face():
return FaceAnalysis(
face_detected=True,
yaw=-20.0,
pitch=0.0,
roll=0.0,
smile_score=0.0,
face_bbox=(100, 100, 200, 200),
)
@pytest.fixture
def live_result():
return LivenessResult(is_live=True, score=0.9, is_real_prob=0.9, is_spoof_prob=0.1)
@pytest.fixture
def client(verified_face, live_result, monkeypatch):
import app.services.face_analysis as fa_module
import app.services.liveness as lv_module
monkeypatch.setattr(fa_module, "face_analysis_service", _MockFaceService(verified_face))
monkeypatch.setattr(lv_module, "liveness_service", _MockLivenessService(live_result))
# Make run_in_cv_executor run synchronously in tests
import app.core.dependencies as dep_module
import asyncio
async def sync_executor(fn, *args):
return fn(*args)
monkeypatch.setattr(dep_module, "run_in_cv_executor", sync_executor)
app_instance = create_app()
return TestClient(app_instance)