Files
pigway-frame-flow/tests/test_photo_sources.py
T

76 lines
2.5 KiB
Python

import pytest
def test_uploaded_photos_exclude_generated_templates_before_limit(client, service):
photo = service.assets.put(b"fixture", "family.jpg", "images")
for _ in range(5):
service.assets.put(b"fixture", "quote.jpg", "generated")
response = client.get("/api/v1/assets?source=uploaded&limit=1")
assert response.status_code == 200
assert response.json()[0]["asset_id"] == photo["asset_id"]
assert response.json()[0]["source"] == "uploaded"
generated = client.get("/api/v1/assets?source=generated").json()
assert len(generated) == 5 and all(a["source"] == "generated" for a in generated)
assert len(client.get("/api/v1/assets").json()) == 6
def test_filename_does_not_determine_photo_source(client, service):
service.assets.put(b"fixture", "weather.jpg", "images")
assert (
client.get("/api/v1/assets?source=uploaded").json()[0]["name"] == "weather.jpg"
)
assert client.get("/api/v1/assets?source=invalid").status_code == 422
def test_multiple_sources_keep_separate_people_and_folder_settings(
service, settings, tmp_path
):
from pigway_frame_flow.providers.photo_sources import PhotoSourceInput
root = tmp_path / "photos"
root.mkdir()
(root / "family").mkdir()
(root / "travel").mkdir()
settings.photo_root = root
service.photo_sources.save(
"family",
PhotoSourceInput(
name="Family",
kind="local",
location="family",
people_filter=True,
person_ids=[1],
orientation="portrait",
),
)
service.photo_sources.save(
"travel",
PhotoSourceInput(
name="Travel",
kind="local",
location="travel",
people_filter=True,
person_ids=[2],
orientation="landscape",
),
)
before = service.photo_sources.get("travel").model_dump()
service.photo_sources.save(
"family",
PhotoSourceInput(
name="Family",
kind="local",
location="family",
people_filter=True,
person_ids=[3],
orientation="auto",
),
)
assert service.photo_sources.get("travel").model_dump() == before
assert service.photo_sources.get("family").person_ids == [3]
assert service.photo_sources.get("travel").person_ids == [2]
# Legacy algorithms remain covered; production filesystem access is tested separately.
pytestmark = pytest.mark.usefixtures("legacy_photo_engine")