Files
rf4-spotter/apps/api/tests/test_storage.py
T

40 lines
1.4 KiB
Python

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")