Files

70 lines
2.4 KiB
Python
Raw Permalink Normal View History

"""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