from typing import Any, Coroutine import pytest import pytest_asyncio from fastapi.testclient import TestClient from sqlalchemy.sql import text from syrupy.assertion import SnapshotAssertion from delivery_metadata.api.app import app from delivery_metadata.clients.art_relations import get_genre_mapping from delivery_metadata.constants import StoreIds @pytest_asyncio.fixture async def create_genre_mapping_tables(test_client: TestClient) -> None: async with app.state.art_relations_connector.db_session( transaction=True, turn_off_foreign_key_checks=True ) as session: await session.execute(text("TRUNCATE TABLE dms_genre_mapping")) await session.execute( text(""" INSERT INTO dms_genre_mapping ( dms_genre_mapping_id, orchard_subgenre_id, dms_master_genre_id ) VALUES ( :dms_genre_mapping_id, :orchard_subgenre_id, :dms_master_genre_id ) """), [ { "dms_genre_mapping_id": 1, "orchard_subgenre_id": 1158, "dms_master_genre_id": 1, }, ], ) async with app.state.art_relations_connector.db_session( transaction=True, turn_off_foreign_key_checks=True ) as session: await session.execute(text("TRUNCATE TABLE dms_master_genre")) await session.execute( text(""" INSERT INTO dms_master_genre ( dms_master_genre_id, customer_master_master_id, dms_master_genre, genre_code ) VALUES ( :dms_master_genre_id, :customer_master_master_id, :dms_master_genre, :genre_code ) """), [ { "dms_master_genre_id": 1, "customer_master_master_id": StoreIds.AMAZON, "dms_master_genre": "DANCE & ELECTRONIC", "genre_code": "", }, ], ) async with app.state.art_relations_connector.db_session( transaction=True, turn_off_foreign_key_checks=True ) as session: await session.execute(text("TRUNCATE TABLE dms_master_subgenre")) await session.execute( text(""" INSERT INTO dms_master_subgenre ( dms_master_subgenre_id, dms_master_genre_id, dms_master_subgenre, subgenre_code ) VALUES ( :dms_master_subgenre_id, :dms_master_genre_id, :dms_master_subgenre, :subgenre_code ) """), [ { "dms_master_subgenre_id": 1, "dms_master_genre_id": 1, "dms_master_subgenre": "HOUSE/DEEP HOUSE", "subgenre_code": "", }, ], ) async with app.state.art_relations_connector.db_session( transaction=True, turn_off_foreign_key_checks=True ) as session: await session.execute(text("TRUNCATE TABLE dms_subgenre_mapping")) await session.execute( text(""" INSERT INTO dms_subgenre_mapping ( dms_subgenre_mapping_id, orchard_subgenre_id, dms_master_subgenre_id ) VALUES ( :dms_subgenre_mapping_id, :orchard_subgenre_id, :dms_master_subgenre_id ) """), [ { "dms_subgenre_mapping_id": 1, "orchard_subgenre_id": 1158, "dms_master_subgenre_id": 1, }, ], ) @pytest.mark.asyncio async def test_get_amazon_genre_mapping( create_genre_tables: Coroutine[Any, Any, None], create_genre_mapping_tables: Coroutine[Any, Any, None], snapshot: SnapshotAssertion, ) -> None: result = await get_genre_mapping(StoreIds.AMAZON) assert result == snapshot @pytest.mark.asyncio async def test_get_spotify_genre_mapping( create_genre_tables: Coroutine[Any, Any, None], create_genre_mapping_tables: Coroutine[Any, Any, None], ) -> None: result = await get_genre_mapping(StoreIds.SPOTIFY) assert result == []