"""Integration tests for GET /api/v1/collections (browse/discover, section 17 -- additive beyond the spec's minimum endpoint list): pagination against real PostgreSQL, exercised through collection_service.list_collections directly. Mirrors test_company_browse.py; collections have no categorical field to filter by and no popularity/date field to sort by, so there's no filter case and always alphabetical-by-name ordering to test.""" from __future__ import annotations import pytest from sqlalchemy.ext.asyncio import AsyncSession from app.repositories.provider_repository import get_or_create_provider from app.repositories.reference_repository import get_or_create_collection from app.services import collection_service _COLLECTIONS = [ ("3001", "Zeta Trilogy"), ("3002", "Alpha Saga"), ("3003", "Mid Collection"), ("3004", "Beta Universe"), ] async def _seed_collections(db_session: AsyncSession) -> None: provider = await get_or_create_provider(db_session, "tmdb", "TMDB") for external_id, name in _COLLECTIONS: await get_or_create_collection( db_session, provider_id=provider.id, external_id=external_id, name=name ) await db_session.commit() @pytest.mark.asyncio async def test_list_collections_defaults_to_alphabetical_by_name(db_session: AsyncSession): await _seed_collections(db_session) out = await collection_service.list_collections(db_session, page=1, page_size=20) assert out.total_results == 4 assert out.total_pages == 1 assert [c.name for c in out.results] == [ "Alpha Saga", "Beta Universe", "Mid Collection", "Zeta Trilogy", ] @pytest.mark.asyncio async def test_list_collections_paginates(db_session: AsyncSession): await _seed_collections(db_session) page1 = await collection_service.list_collections(db_session, page=1, page_size=2) page2 = await collection_service.list_collections(db_session, page=2, page_size=2) assert page1.total_results == 4 assert page1.total_pages == 2 assert [c.name for c in page1.results] == ["Alpha Saga", "Beta Universe"] assert [c.name for c in page2.results] == ["Mid Collection", "Zeta Trilogy"] @pytest.mark.asyncio async def test_list_collections_returns_empty_page_when_none_exist(db_session: AsyncSession): out = await collection_service.list_collections(db_session, page=1, page_size=20) assert out.results == [] assert out.total_results == 0 assert out.total_pages == 0