face-intel / tests /providers /test_qr_code.py
Marwan
Restructure + add reverse face search (PimEyes-style)
f5eeb1c
Raw
History Blame Contribute Delete
2.05 kB
"""Provider tests for QR code + barcode providers."""
from __future__ import annotations
import cv2
import numpy as np
import pytest
from config.settings import Settings
from pipeline.feature_extraction import PipelineOutput
from providers.object_intelligence.qr_code import QRCodeProvider
@pytest.fixture
def qr_provider():
return QRCodeProvider(settings=Settings(environment="test", db_path=":memory:"))
@pytest.fixture
def pipeline_output(sample_image_bytes):
img = cv2.imdecode(np.frombuffer(sample_image_bytes, np.uint8), cv2.IMREAD_COLOR)
return PipelineOutput(
image=img, image_hash="h", width=img.shape[1], height=img.shape[0], source="bytes",
original_bytes=sample_image_bytes, original_format=".jpg",
)
class TestQRCodeProvider:
def test_name(self, qr_provider):
assert qr_provider.name == "qr_code"
def test_capability(self, qr_provider):
from models.providers import ProviderCapability
assert qr_provider.capability == ProviderCapability.OBJECT_DETECTION
def test_is_available(self, qr_provider):
# OpenCV has QRCodeDetector since 4.2
assert qr_provider.is_available() is True
def test_execute_no_qr(self, qr_provider, pipeline_output):
"""An image without a QR code should return empty results."""
result = qr_provider.execute(pipeline_output)
assert result.success is True
assert len(result.normalized["objects"]) == 0
def test_execute_synthetic_qr(self, qr_provider):
"""Verify the provider handles an arbitrary image without crashing.
We don't generate a real QR code (cv2.QRCodeGenerator isn't available
in all OpenCV builds); we just verify the provider runs.
"""
img = np.zeros((200, 200, 3), dtype=np.uint8)
po = PipelineOutput(
image=img, image_hash="qr", width=200, height=200, source="bytes",
)
result = qr_provider.execute(po)
assert result.success is True
assert "objects" in result.normalized