import pytest from pathlib import Path from analyzer import is_blurry def make_test_image(tmp_path, color=(200, 200, 200)): from PIL import Image img = Image.new("RGB", (100, 100), color=color) p = tmp_path / "test.jpg" img.save(p) return str(p) def test_solid_color_image_is_blurry(tmp_path): path = make_test_image(tmp_path) assert is_blurry(path, threshold=100) is True def test_normal_image_is_not_blurry(tmp_path): from PIL import Image, ImageDraw img = Image.new("RGB", (100, 100), color=(255, 255, 255)) draw = ImageDraw.Draw(img) for i in range(0, 100, 2): draw.line([(i, 0), (i, 100)], fill=(0, 0, 0), width=1) p = tmp_path / "sharp.jpg" img.save(p) assert is_blurry(str(p), threshold=100) is False from analyzer import is_overexposed, is_underexposed def test_white_image_is_overexposed(tmp_path): path = make_test_image(tmp_path, color=(255, 255, 255)) assert is_overexposed(path, threshold=240) is True def test_dark_image_is_underexposed(tmp_path): path = make_test_image(tmp_path, color=(10, 10, 10)) assert is_underexposed(path, threshold=30) is True def test_normal_image_is_neither(tmp_path): path = make_test_image(tmp_path, color=(128, 128, 128)) assert is_overexposed(path, threshold=240) is False assert is_underexposed(path, threshold=30) is False from analyzer import find_duplicates def test_identical_images_are_duplicates(tmp_path): p1 = make_test_image(tmp_path, color=(100, 150, 200)) import shutil p2 = tmp_path / "copy.jpg" shutil.copy(p1, p2) groups = find_duplicates([p1, str(p2)], threshold=0) assert len(groups) == 1 assert len(groups[0]) == 2 def test_different_images_are_not_duplicates(tmp_path): from PIL import Image p1 = make_test_image(tmp_path, color=(0, 0, 0)) img = Image.new("RGB", (100, 100), color=(255, 0, 0)) p2 = tmp_path / "red.jpg" img.save(p2) groups = find_duplicates([p1, str(p2)], threshold=0) assert len(groups) == 0