from __future__ import annotations import io import pytest from PIL import Image from app.storage import ScreenshotError, prepare_image, validate_upload_metadata def test_prepare_image_removes_metadata() -> None: source = Image.new("RGB", (32, 24), "#12383b") exif = Image.Exif() exif[0x010E] = "private note" raw = io.BytesIO() source.save(raw, format="JPEG", exif=exif) cleaned, extension, mime = prepare_image(raw.getvalue()) with Image.open(io.BytesIO(cleaned)) as result: assert result.getexif() == {} assert result.size == (32, 24) assert (extension, mime) == ("jpg", "image/jpeg") def test_prepare_image_rejects_non_image() -> None: with pytest.raises(ScreenshotError, match="valid image"): prepare_image(b"not an image") def test_upload_metadata_requires_matching_supported_mime_and_extension() -> None: validate_upload_metadata("catch.jpeg", "image/jpeg") validate_upload_metadata("catch.webp", "image/webp") with pytest.raises(ScreenshotError, match="extension and MIME"): validate_upload_metadata("catch.exe", "image/jpeg") with pytest.raises(ScreenshotError, match="extension and MIME"): validate_upload_metadata("catch.png", "image/jpeg") with pytest.raises(ScreenshotError, match="extension and MIME"): validate_upload_metadata("catch.jpg", "application/octet-stream")