deepdetection / tests /test_fusion.py
akagtag's picture
Initial commit
4e75170
"""tests/test_fusion.py"""
from __future__ import annotations
import pytest
from src.types import EngineResult, GeneratorLabel
def _make_result(engine, verdict, conf, explanation="Test"):
return EngineResult(
engine=engine, verdict=verdict, confidence=conf,
explanation=explanation, processing_time_ms=100.0
)
def test_fuser_imports():
from src.fusion.fuser import Fuser
assert Fuser is not None
def test_fuser_image_returns_detection_response(engine_result_fake):
from src.fusion.fuser import Fuser
from src.engines.coherence.detector import CoherenceDetector
from src.engines.sstgnn.detector import SSTGNNDetector
fuser = Fuser()
results = [engine_result_fake, CoherenceDetector.image_stub(), SSTGNNDetector.image_stub()]
response = fuser.fuse(results, media_type="image", total_ms=100.0)
from src.types import DetectionResponse
assert isinstance(response, DetectionResponse)
assert response.verdict in ("FAKE", "REAL")
assert 0.0 <= response.confidence <= 1.0
assert len(response.engine_breakdown) == 3
def test_fuser_high_fake_confidence_returns_fake():
from src.fusion.fuser import Fuser
fuser = Fuser()
results = [
_make_result("fingerprint", "FAKE", 0.95),
_make_result("coherence", "FAKE", 0.88),
_make_result("sstgnn", "FAKE", 0.82),
]
resp = fuser.fuse(results, media_type="video", total_ms=500.0)
assert resp.verdict == "FAKE"
assert resp.confidence > 0.5
def test_fuser_high_real_confidence_returns_real():
from src.fusion.fuser import Fuser
fuser = Fuser()
results = [
_make_result("fingerprint", "REAL", 0.93),
_make_result("coherence", "REAL", 0.88),
_make_result("sstgnn", "REAL", 0.85),
]
resp = fuser.fuse(results, media_type="video", total_ms=500.0)
assert resp.verdict == "REAL"
def test_fuser_empty_returns_default():
from src.fusion.fuser import Fuser
fuser = Fuser()
resp = fuser.fuse([], media_type="image", total_ms=0.0)
assert resp.verdict in ("FAKE", "REAL")
def test_fuser_real_verdict_sets_generator_real():
from src.fusion.fuser import Fuser
fuser = Fuser()
results = [_make_result("fingerprint", "REAL", 0.95)]
resp = fuser.fuse(results, media_type="image", total_ms=100.0)
if resp.verdict == "REAL":
assert resp.attributed_generator == GeneratorLabel.real
def test_types_generator_label_count():
assert len(GeneratorLabel) == 8
def test_types_generator_index_mapping():
from src.types import GENERATOR_INDEX_TO_LABEL
assert GENERATOR_INDEX_TO_LABEL[0] == GeneratorLabel.real
assert GENERATOR_INDEX_TO_LABEL[1] == GeneratorLabel.unknown_gan
assert GENERATOR_INDEX_TO_LABEL[2] == GeneratorLabel.stable_diffusion
assert GENERATOR_INDEX_TO_LABEL[7] == GeneratorLabel.imagen
def test_engine_result_confidence_validator():
with pytest.raises(Exception):
EngineResult(
engine="test", verdict="FAKE", confidence=1.5,
explanation="x", processing_time_ms=1.0
)
def test_engine_result_confidence_rounds():
r = EngineResult(
engine="test", verdict="FAKE", confidence=0.923456789,
explanation="x", processing_time_ms=1.0
)
assert len(str(r.confidence).split(".")[-1]) <= 4