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]