import io from PIL import Image def test_gallery_thumbnail_upgrades_existing_cache_and_reuses_it(client, settings): cache = settings.data_dir / "cache" original = cache / "living-room-1.original" thumb = cache / "living-room-1-thumb.jpg" Image.new("RGB", (1600, 1200), "blue").save(original, "JPEG") Image.new("RGB", (300, 225), "blue").save(thumb, "JPEG") url = "/api/v1/devices/living-room/images/1/file?thumbnail=true" result = client.get(url) assert result.status_code == 200 assert Image.open(io.BytesIO(result.content)).size == (860, 645) modified = thumb.stat().st_mtime_ns assert client.get(url).content == result.content assert thumb.stat().st_mtime_ns == modified assert len(list(cache.glob("living-room-1-thumb*"))) == 1 assert Image.open(original).size == (1600, 1200) def test_gallery_thumbnail_does_not_upscale_small_source(client, settings): original = settings.data_dir / "cache" / "living-room-1.original" Image.new("RGBA", (200, 400), (255, 0, 0, 255)).save(original, "PNG") result = client.get("/api/v1/devices/living-room/images/1/file?thumbnail=true") assert result.status_code == 200 assert Image.open(io.BytesIO(result.content)).size == (200, 400)