70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
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
|