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_track_publishers @pytest_asyncio.fixture async def create_track_publisher_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 track_publisher")) await session.execute(text("TRUNCATE TABLE track")) await session.execute( text( """ INSERT INTO track_publisher ( track_publisher_id, publisher_name, upc, cd, track_id, unique_track_id ) VALUES ( :track_publisher_id, :publisher_name, :upc, :cd, :track_id, :unique_track_id ) """ ), [ { "track_publisher_id": 1, "publisher_name": "1 Publishing", "upc": 12345, "cd": 1, "track_id": 1, "unique_track_id": 4001, }, { "track_publisher_id": 2, "publisher_name": "2 Publishing", "upc": 12345, "cd": 1, "track_id": 2, "unique_track_id": 4002, }, { "track_publisher_id": 3, "publisher_name": "PubFam", "upc": 12345, "cd": 1, "track_id": 3, "unique_track_id": 4003, }, { "track_publisher_id": 4, "publisher_name": "Club Pub", "upc": 678910, "cd": 1, "track_id": 1, "unique_track_id": 5001, }, { "track_publisher_id": 5, "publisher_name": "Club Pub", "upc": 678910, "cd": 1, "track_id": 2, "unique_track_id": 5002, }, { "track_publisher_id": 6, "publisher_name": "Publics Pub", "upc": 678910, "cd": 1, "track_id": 2, "unique_track_id": 5002, }, { "track_publisher_id": 7, "publisher_name": "Fire Pubs", "upc": 75679660923, "cd": 1, "track_id": 1, "unique_track_id": 12345, }, { "track_publisher_id": 122, "publisher_name": "Very Big Star", "upc": 75679660923, "cd": 1, "track_id": 1, "unique_track_id": 12345, }, { "track_publisher_id": 8, "publisher_name": "Fire Pubs", "upc": 75679660923, "cd": 1, "track_id": 2, "unique_track_id": 12347, }, { "track_publisher_id": 9, "publisher_name": "Pubbz House", "upc": 75679660923, "cd": 1, "track_id": 2, "unique_track_id": 12347, }, { "track_publisher_id": 20, "publisher_name": "Fire Pubs", "upc": 75679660923, "cd": 1, "track_id": 3, "unique_track_id": 123410, }, { "track_publisher_id": 10, "publisher_name": "Fire Pubs", "upc": 75679660923, "cd": 2, "track_id": 1, "unique_track_id": 12348, }, { "track_publisher_id": 12, "publisher_name": "Fire Pubs", "upc": 75679660923, "cd": 2, "track_id": 2, "unique_track_id": 12349, }, { "track_publisher_id": 11, "publisher_name": "Publishing Co.", "upc": 75679660923, "cd": 2, "track_id": 2, "unique_track_id": 12349, }, { "track_publisher_id": 121, "publisher_name": "Fire Pubs", "upc": 75679660923, "cd": 2, "track_id": 3, "unique_track_id": 123412, }, ], ) await session.execute( text( """ INSERT INTO track ( id, upc, isrc, cd, track_id, track_name ) VALUES ( :id, :upc, :isrc, :cd, :track_id, :track_name ) """ ), [ { "id": 4001, "upc": 12345, "isrc": "asdf123", "cd": 1, "track_id": 1, "track_name": "Track 1", }, { "id": 4002, "upc": 12345, "isrc": "asdf124", "cd": 1, "track_id": 2, "track_name": "Track 2", }, { "id": 4003, "upc": 12345, "isrc": "asdf125", "cd": 1, "track_id": 3, "track_name": "Track 3", }, { "id": 5001, "upc": 678910, "isrc": "qwerty123", "cd": 1, "track_id": 1, "track_name": "Track 1!", }, { "id": 5002, "upc": 678910, "isrc": "qwerty124", "cd": 1, "track_id": 2, "track_name": "Track 2!", }, { "id": 8003, "upc": 98765, "isrc": "tunez123", "cd": 1, "track_id": 1, "track_name": "Track 1!", }, { "id": 8004, "upc": 98765, "isrc": "tunez124", "cd": 1, "track_id": 2, "track_name": "Track 2!", }, { "id": 12345, "upc": 75679660923, "isrc": "USAT22403171", "cd": 1, "track_id": 1, "track_name": "Volume 1 Track 1", }, { "id": 12347, "upc": 75679660923, "isrc": "USAT22403172", "cd": 1, "track_id": 2, "track_name": "Volume 1 Track 2", }, { "id": 123410, "upc": 75679660923, "isrc": "USAT22403175", "cd": 1, "track_id": 3, "track_name": "Volume 1 Track 3", }, { "id": 12348, "upc": 75679660923, "isrc": "USAT22403173", "cd": 2, "track_id": 1, "track_name": "Volume 2 Track 1", }, { "id": 12349, "upc": 75679660923, "isrc": "USAT22403174", "cd": 2, "track_id": 2, "track_name": "Volume 2 Track 2", }, { "id": 123412, "upc": 75679660923, "isrc": "USAT22403176", "cd": 2, "track_id": 3, "track_name": "Volume 2 Track 3", }, { "id": 701, "upc": 78910, "isrc": "isrc123", "cd": 1, "track_id": 1, "track_name": "Track 1!!!", }, { "id": 702, "upc": 78910, "isrc": "isrc234", "cd": 1, "track_id": 2, "track_name": "Track 2!!!", }, ], ) @pytest.mark.asyncio async def test_get_track_publishers( create_track_publisher_tables: Coroutine[Any, Any, None], snapshot: SnapshotAssertion, ) -> None: result = await get_track_publishers(75679660923) assert result == snapshot