verifile-x-api / backend /tests /test_ai_detector.py
abinazebinoy's picture
Add AI detector integration and cache tests
981579e
"""
Tests for AI-generated image detection.
"""
import pytest
from backend.services.ai_detector import AIDetector
def test_ai_detector_initialization(sample_image_bytes):
"""Test AI detector initializes correctly."""
detector = AIDetector(sample_image_bytes, "test.png")
assert detector.filename == "test.png"
assert detector.cv_image is not None
def test_noise_analysis(sample_image_bytes):
"""Test noise pattern analysis."""
detector = AIDetector(sample_image_bytes, "test.png")
signals = detector.analyze_noise_patterns()
assert "noise_variance" in signals
assert "noise_consistency" in signals
assert "suspicious" in signals
assert isinstance(signals["suspicious"], bool)
def test_frequency_analysis(sample_image_bytes):
"""Test frequency domain analysis."""
detector = AIDetector(sample_image_bytes, "test.png")
signals = detector.analyze_frequency_domain()
assert "frequency_ratio" in signals
assert "spectral_entropy" in signals
assert signals["spectral_entropy"] > 0
def test_jpeg_analysis(sample_image_bytes):
"""Test JPEG artifact analysis."""
detector = AIDetector(sample_image_bytes, "test.png")
signals = detector.analyze_jpeg_artifacts()
assert "blockiness" in signals
assert "edge_density" in signals
assert signals["edge_density"] >= 0
def test_color_analysis(sample_image_bytes):
"""Test color distribution analysis."""
detector = AIDetector(sample_image_bytes, "test.png")
signals = detector.analyze_color_distribution()
assert "color_entropy" in signals
assert "mean_saturation" in signals
assert signals["color_entropy"] > 0
def test_ai_probability_calculation(sample_image_bytes):
"""Test AI probability calculation."""
detector = AIDetector(sample_image_bytes, "test.png")
# Get all signals
signals = {
"noise": detector.analyze_noise_patterns(),
"frequency": detector.analyze_frequency_domain(),
"jpeg": detector.analyze_jpeg_artifacts(),
"color": detector.analyze_color_distribution()
}
probability = detector.calculate_ai_probability(signals)
assert 0 <= probability <= 1
assert isinstance(probability, float)
def test_complete_detection(sample_image_bytes):
"""Test complete AI detection workflow."""
detector = AIDetector(sample_image_bytes, "test.png")
report = detector.detect()
assert "ai_probability" in report
assert "classification" in report
assert "confidence" in report
assert "detection_signals" in report
# Check classification is valid
valid_classifications = [
"likely_ai_generated",
"possibly_ai_generated",
"likely_authentic"
]
assert report["classification"] in valid_classifications
def test_forensics_integration(sample_image_bytes):
"""Test AI detection integration with forensics."""
from backend.services.image_forensics import ImageForensics
forensics = ImageForensics(sample_image_bytes, "test.png")
ai_report = forensics.detect_ai_generation()
assert "ai_probability" in ai_report
assert "classification" in ai_report
def test_forensics_full_report_includes_ai(sample_image_bytes):
"""Test full forensic report includes AI detection."""
from backend.services.image_forensics import ImageForensics
forensics = ImageForensics(sample_image_bytes, "test.png")
report = forensics.generate_forensic_report()
assert "ai_detection" in report
assert "ai_probability" in report["summary"]
assert "ai_classification" in report["summary"]