2026-10-05 09:36:20 +02:00
|
|
|
# retoor <retoor@molodetz.nl>
|
|
|
|
|
from molodetz import config
|
2026-10-05 11:42:35 +02:00
|
|
|
from PIL import Image
|
|
|
|
|
|
|
|
|
|
from molodetz.gallery import GALLERY, RETIRED_GALLERY
|
2026-10-05 09:36:20 +02:00
|
|
|
|
|
|
|
|
BANNED = ("selfie", "mirror", "devplace", "nigel", "nldr", "waifu", "zwem")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_gallery_files_exist_and_are_allowed():
|
|
|
|
|
assert GALLERY
|
|
|
|
|
for entry in GALLERY:
|
|
|
|
|
name = entry["file"] if isinstance(entry, dict) else entry[0]
|
|
|
|
|
assert (config.MEDIA_SOURCE_DIR / name).is_file(), name
|
|
|
|
|
assert not any(word in name.lower() for word in BANNED), name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_both_kinds_present():
|
|
|
|
|
kinds = {entry["kind"] if isinstance(entry, dict) else entry[1] for entry in GALLERY}
|
|
|
|
|
assert {"flyer", "meme"} <= kinds
|
2026-10-05 11:42:35 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_gallery_image_sizes_match_kind():
|
|
|
|
|
for name, kind, _ in GALLERY:
|
|
|
|
|
if not name.startswith(("flyer-elite", "flyer-taste", "flyer-demo", "flyer-hands", "meme-classic", "meme-vibe", "meme-elite")):
|
|
|
|
|
continue
|
|
|
|
|
with Image.open(config.MEDIA_SOURCE_DIR / name) as image:
|
|
|
|
|
assert image.size == ((1080, 1350) if kind == "flyer" else (1080, 1080)), name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_retired_files_stay_on_disk_but_leave_the_gallery():
|
|
|
|
|
names = {entry[0] for entry in GALLERY}
|
|
|
|
|
assert len(RETIRED_GALLERY) == 20
|
|
|
|
|
for name in RETIRED_GALLERY:
|
|
|
|
|
assert name not in names, name
|
|
|
|
|
assert (config.MEDIA_SOURCE_DIR / name).is_file(), name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_gallery_captions_are_clean_english():
|
|
|
|
|
for name, _, caption in GALLERY:
|
|
|
|
|
assert caption and "\u2014" not in caption, name
|
|
|
|
|
assert not any(word in caption.lower() for word in BANNED), name
|
|
|
|
|
assert GALLERY[0][0] == "flyer-elite-twice.jpg"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_retire_media_soft_deletes_once(app_server):
|
|
|
|
|
from molodetz.database import db
|
|
|
|
|
from molodetz.database.media import media_by_kind, retire_media, upsert_media
|
|
|
|
|
|
|
|
|
|
upsert_media("story.jpg", "meme", "Old Dutch story", 999, 1080, 1350, None, None, None)
|
|
|
|
|
assert retire_media("story.jpg") is True
|
|
|
|
|
assert retire_media("story.jpg") is False
|
|
|
|
|
row = db["media_items"].find_one(filename="story.jpg")
|
|
|
|
|
assert row["deleted_at"] and row["deleted_by"] == "system"
|
|
|
|
|
assert "story.jpg" not in {item["filename"] for item in media_by_kind("meme")}
|