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_writers @pytest_asyncio.fixture async def create_track_writer_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_writer")) await session.execute(text("TRUNCATE TABLE track")) await session.execute( text(""" INSERT INTO track_writer ( track_writer_id, writer_name, upc, cd, track_id, unique_track_id ) VALUES ( :track_writer_id, :writer_name, :upc, :cd, :track_id, :unique_track_id ) """), [ { "track_writer_id": 1, "writer_name": "John", "upc": 123456, "cd": 1, "track_id": 1, "unique_track_id": 1, }, { "track_writer_id": 2, "writer_name": "Leslie", "upc": 123456, "cd": 1, "track_id": 1, "unique_track_id": 1, }, { "track_writer_id": 3, "writer_name": "Grace", "upc": 123456, "cd": 1, "track_id": 2, "unique_track_id": 2, }, { "track_writer_id": 4, "writer_name": "John", "upc": 123456, "cd": 1, "track_id": 2, "unique_track_id": 2, }, { "track_writer_id": 5, "writer_name": "Glenn", "upc": 123456, "cd": 1, "track_id": 3, "unique_track_id": 3, }, { "track_writer_id": 6, "writer_name": "Joan", "upc": 123456, "cd": 1, "track_id": 3, "unique_track_id": 3, }, { "track_writer_id": 7, "writer_name": "Connie Blair", "upc": 75679660923, "cd": 1, "track_id": 1, "unique_track_id": 12345, }, { "track_writer_id": 8, "writer_name": "Florence", "upc": 75679660923, "cd": 1, "track_id": 1, "unique_track_id": 12345, }, { "track_writer_id": 27, "writer_name": "Very Big Star", "upc": 75679660923, "cd": 1, "track_id": 1, "unique_track_id": 12345, }, { "track_writer_id": 9, "writer_name": "Jimmy Alpine", "upc": 75679660923, "cd": 1, "track_id": 2, "unique_track_id": 12347, }, { "track_writer_id": 20, "writer_name": "Jimmy Alpine", "upc": 75679660923, "cd": 1, "track_id": 3, "unique_track_id": 123410, }, { "track_writer_id": 10, "writer_name": "Gina George", "upc": 75679660923, "cd": 2, "track_id": 1, "unique_track_id": 12348, }, { "track_writer_id": 11, "writer_name": "JJ Lemon", "upc": 75679660923, "cd": 2, "track_id": 1, "unique_track_id": 12348, }, { "track_writer_id": 12, "writer_name": "Flamez", "upc": 75679660923, "cd": 2, "track_id": 1, "unique_track_id": 12348, }, { "track_writer_id": 13, "writer_name": "Flamez", "upc": 75679660923, "cd": 2, "track_id": 2, "unique_track_id": 12349, }, { "track_writer_id": 21, "writer_name": "JJ Lemon", "upc": 75679660923, "cd": 2, "track_id": 3, "unique_track_id": 123412, }, { "track_writer_id": 14, "writer_name": "John Ray", "upc": 987654, "cd": 1, "track_id": 1, "unique_track_id": 7, }, ], ) 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": 1, "upc": 123456, "isrc": "abcdefg123456c", "cd": 1, "track_id": 1, "track_name": "Vol 1 Track 1", }, { "id": 2, "upc": 123456, "isrc": "abcdefg123456d", "cd": 1, "track_id": 2, "track_name": "Vol 1 Track 2", }, { "id": 3, "upc": 123456, "isrc": "abcdefg123456e", "cd": 1, "track_id": 3, "track_name": "Vol 1 Track 3", }, { "id": 12345, "upc": 75679660923, "isrc": "USAT22403171", "cd": 1, "track_id": 1, "track_name": "Vol 1 Track 1", }, { "id": 12347, "upc": 75679660923, "isrc": "USAT22403172", "cd": 1, "track_id": 2, "track_name": "Vol 1 Track 2", }, { "id": 123410, "upc": 75679660923, "isrc": "USAT22403175", "cd": 1, "track_id": 3, "track_name": "Vol 1 Track 3", }, { "id": 12348, "upc": 75679660923, "isrc": "USAT22403173", "cd": 2, "track_id": 1, "track_name": "Vol 2 Track 1", }, { "id": 12349, "upc": 75679660923, "isrc": "USAT22403174", "cd": 2, "track_id": 2, "track_name": "Vol 2 Track 2", }, { "id": 123412, "upc": 75679660923, "isrc": "USAT22403176", "cd": 2, "track_id": 3, "track_name": "Vol 2 Track 3", }, { "id": 7, "upc": 987654, "isrc": "abcdefg123456i", "cd": 1, "track_id": 1, "track_name": "Vol 1 Track 1", }, ], ) @pytest.mark.asyncio async def test_get_track_artists( create_track_writer_tables: Coroutine[Any, Any, None], snapshot: SnapshotAssertion, ) -> None: result = await get_track_writers(75679660923) assert result == snapshot