"""Integration tests for GET /api/v1/genres (section 17, additive): a directory for the `genre` filter GET /movies and GET /series already accept, which takes an Aurora genre id with no prior way to discover what those ids are. Mirrors test_collection_browse.py; genres 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.reference_repository import get_or_create_genre from app.services import genre_service _GENRES = ["Zeta Fiction", "Alpha Comedy", "Mid Drama", "Beta Horror"] async def _seed_genres(db_session: AsyncSession) -> None: for name in _GENRES: await get_or_create_genre(db_session, name) await db_session.commit() @pytest.mark.asyncio async def test_list_genres_defaults_to_alphabetical_by_name(db_session: AsyncSession): await _seed_genres(db_session) out = await genre_service.list_genres(db_session, page=1, page_size=50) assert out.total_results == 4 assert out.total_pages == 1 assert [g.name for g in out.results] == [ "Alpha Comedy", "Beta Horror", "Mid Drama", "Zeta Fiction", ] @pytest.mark.asyncio async def test_list_genres_paginates(db_session: AsyncSession): await _seed_genres(db_session) page1 = await genre_service.list_genres(db_session, page=1, page_size=2) page2 = await genre_service.list_genres(db_session, page=2, page_size=2) assert page1.total_results == 4 assert page1.total_pages == 2 assert [g.name for g in page1.results] == ["Alpha Comedy", "Beta Horror"] assert [g.name for g in page2.results] == ["Mid Drama", "Zeta Fiction"] @pytest.mark.asyncio async def test_list_genres_returns_empty_page_when_none_exist(db_session: AsyncSession): out = await genre_service.list_genres(db_session, page=1, page_size=50) assert out.results == [] assert out.total_results == 0 assert out.total_pages == 0