Files
transcription/tests/services/test_photo_service.py
T
2026-08-23 12:23:57 -05:00

54 lines
2.4 KiB
Python

from __future__ import annotations
import pytest
from transcription.config import Settings
from transcription.db.models import Person
from transcription.services.people import PeopleService
from transcription.services.photos import PhotosService
PNG_BYTES = bytes.fromhex(
"89504e470d0a1a0a0000000d49484452000000010000000108060000001f15c4890000000a49444154789c6360000002000100"
"05fe02fea7b1b8000000004945"
) + b"NDAE\xae\x42\x60\x82"
@pytest.mark.asyncio
async def test_create_photo_persists_media_and_primary_state(default_session_factory, tmp_path):
settings = Settings(openrouter_api_key="test-key", upload_dir=tmp_path / "uploads")
people = PeopleService(session_factory=default_session_factory)
photos = PhotosService(session_factory=default_session_factory, settings=settings)
person = await people.create_person(Person(given_names="Photo", last_name="Person"))
first = await photos.create_photo(person_id=person.id, filename="one.png", file_bytes=PNG_BYTES)
second = await photos.create_photo(person_id=person.id, filename="two.png", file_bytes=PNG_BYTES)
listed = await photos.list_photos(person_id=person.id)
assert first.path.startswith("photos/")
assert (settings.upload_dir / first.path).exists()
assert first.is_primary is True
assert second.is_primary is False
assert listed[0].is_primary is True
@pytest.mark.asyncio
async def test_set_primary_and_delete_promotes_next_photo(default_session_factory, tmp_path):
settings = Settings(openrouter_api_key="test-key", upload_dir=tmp_path / "uploads")
people = PeopleService(session_factory=default_session_factory)
photos = PhotosService(session_factory=default_session_factory, settings=settings)
person = await people.create_person(Person(given_names="Primary", last_name="Person"))
first = await photos.create_photo(person_id=person.id, filename="one.png", file_bytes=PNG_BYTES)
second = await photos.create_photo(person_id=person.id, filename="two.png", file_bytes=PNG_BYTES)
await photos.set_primary(photo_id=second.id)
switched = await photos.list_photos(person_id=person.id)
assert switched[0].id == second.id
assert switched[0].is_primary is True
await photos.delete_photo(photo_id=second.id)
remaining = await photos.list_photos(person_id=person.id)
assert len(remaining) == 1
assert remaining[0].id == first.id
assert remaining[0].is_primary is True