import pytest_asyncio from fastapi.testclient import TestClient from sqlalchemy.sql import text from delivery_metadata.api.app import app from delivery_metadata.clients.art_relations.track import ArtRelationsTrack from delivery_metadata.constants import ( LyricsExplicitness, TrackOfferType, TrackTypes, ) @pytest_asyncio.fixture async def create_genre_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 genre")) await session.execute( text(""" INSERT INTO genre (genre_id, genre) VALUES (:genre_id, :genre) """), [ { "genre_id": 1, "genre": "Rock", }, { "genre_id": 2, "genre": "Electronic", }, { "genre_id": 3, "genre": "Metal", }, { "genre_id": 4, "genre": "Punk", }, { "genre_id": 5, "genre": "Folk", }, { "genre_id": 6, "genre": "Hip-pop/Rap", }, { "genre_id": 7, "genre": "Pop", }, { "genre_id": 8, "genre": "Jazz", }, { "genre_id": 9, "genre": "Country", }, ], ) 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 subgenre")) await session.execute( text(""" INSERT INTO subgenre (orchard_id, name, genre_id) VALUES (:orchard_id, :name, :genre_id) """), [ { "orchard_id": 511, "name": "80's", "genre_id": 1, }, { "orchard_id": 1158, "name": "Afro house", "genre_id": 2, }, { "orchard_id": 36, "name": "Alternative", "genre_id": 3, }, { "orchard_id": 50, "name": "Hardcore", "genre_id": 4, }, { "orchard_id": 64, "name": "Acoustic", "genre_id": 5, }, { "orchard_id": 370, "name": "A Cappellas", "genre_id": 6, }, { "orchard_id": 79, "name": "A Cappella", "genre_id": 7, }, { "orchard_id": 94, "name": "Acid Jazz", "genre_id": 8, }, { "orchard_id": 301, "name": "Americana", "genre_id": 9, }, ], ) @pytest_asyncio.fixture async def create_track_table( art_relations_tracks_mock: list[ArtRelationsTrack], 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")) await session.execute( text(""" INSERT INTO track ( id, upc, release_id, isrc, cd, track_id, track_name, version, length_minute, length_seconds, preview_start_time, explicit_lyrics, p_line, track_type, meta_language, offer_type ) VALUES ( :id, :upc, :release_id, :isrc, :cd, :track_id, :track_name, :version, :length_minute, :length_seconds, :preview_start_time, :explicit_lyrics, :p_line, :track_type, :meta_language, :offer_type ) """), [ { "id": 12345, "upc": 75679660923, "release_id": 456, "isrc": "USAT22403171", "cd": 1, "track_id": 1, "track_name": "Volume 1 Track 1", "version": "", "length_minute": 0, "length_seconds": 14, "preview_start_time": 0, "explicit_lyrics": LyricsExplicitness.CLEAN.value, "p_line": "2024 Some Label", "track_type": TrackTypes.MUSIC.value, "meta_language": None, "offer_type": TrackOfferType.ALL.value, }, { "id": 12347, "upc": 75679660923, "release_id": 456, "isrc": " USAT22403172", "cd": 1, "track_id": 2, "track_name": "Volume 1 Track 2", "version": " ", "length_minute": 2, "length_seconds": 0, "preview_start_time": None, "explicit_lyrics": LyricsExplicitness.EXPLICIT.value, "p_line": " 2022 Cool Label", "track_type": TrackTypes.MUSIC.value, "meta_language": "N/A", "offer_type": TrackOfferType.TRACK_DOWNLOAD_STREAM.value, }, { "id": 123410, "upc": 75679660923, "release_id": 456, "isrc": " USAT22403175", "cd": 1, "track_id": 3, "track_name": "Volume 1 Track 3", "version": " ", "length_minute": 2, "length_seconds": 8, "preview_start_time": None, "explicit_lyrics": LyricsExplicitness.EXPLICIT.value, "p_line": " 2022 Cool Label", "track_type": TrackTypes.MUSIC.value, "meta_language": "N/A", "offer_type": TrackOfferType.TRACK_DOWNLOAD_STREAM.value, }, { "id": 12348, "upc": 75679660923, "release_id": 456, "isrc": "USAT22403173", "cd": 2, "track_id": 1, "track_name": "Volume 2 Track 1", "version": None, "length_minute": 3, "length_seconds": 30, "preview_start_time": 35000, "explicit_lyrics": LyricsExplicitness.NOT_EXPLICIT.value, "p_line": "ASDF Label", "track_type": TrackTypes.MUSIC.value, "meta_language": "zh", "offer_type": TrackOfferType.STREAM_ONLY.value, }, { "id": 12349, "upc": 75679660923, "release_id": 456, "isrc": "USAT22403174", "cd": 2, "track_id": 2, "track_name": "Volume 2 Track 2", "version": "Cool Version", "length_minute": 3, "length_seconds": 0, "preview_start_time": 170000, "explicit_lyrics": LyricsExplicitness.NOT_EXPLICIT.value, "p_line": "2021 Unidentified Fruit Label", "track_type": TrackTypes.MUSIC.value, "meta_language": "BGC", "offer_type": TrackOfferType.ALL.value, }, { "id": 123412, "upc": 75679660923, "release_id": 456, "isrc": "USAT22403176", "cd": 2, "track_id": 3, "track_name": "Volume 2 Track 3", "version": None, "length_minute": 3, "length_seconds": 0, "preview_start_time": 170000, "explicit_lyrics": LyricsExplicitness.NOT_EXPLICIT.value, "p_line": "2021 Unidentified Fruit Label", "track_type": TrackTypes.MUSIC.value, "meta_language": "BGC", "offer_type": TrackOfferType.ALL.value, }, { "id": 6564645, "upc": 12345678901, "release_id": 123, "isrc": "US224SD03176", "cd": 1, "track_id": 1, "track_name": "Volume 1 Track 1", "version": None, "length_minute": 3, "length_seconds": 0, "preview_start_time": 170000, "explicit_lyrics": LyricsExplicitness.NOT_EXPLICIT.value, "p_line": "2021 Unidentified Fruit Label", "track_type": TrackTypes.MUSIC.value, "meta_language": "BGC", "offer_type": TrackOfferType.ALL.value, }, ], ) await session.execute(text("TRUNCATE TABLE track_additional_isrc")) await session.execute( text( """ INSERT INTO track_additional_isrc(track_id, type, isrc) VALUES (:track_id, 'atmos', :isrc) """ ), [ {"track_id": 12345, "isrc": "spatial_isrc"}, ], ) @pytest_asyncio.fixture async def create_itunes_languages_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 itunes_languages")) await session.execute( text(""" INSERT INTO itunes_languages(language_id, language, language_code) VALUES (:language_id, :language, :language_code) """), [ {"language_id": 1, "language": "Afrikaans", "language_code": "af"}, {"language_id": 2, "language": "Arabic", "language_code": "ar"}, {"language_id": 3, "language": "Bulgarian", "language_code": "bg"}, { "language_id": 4, "language": "Cantonese", "language_code": "yue-Hant", }, {"language_id": 5, "language": "Catalan", "language_code": "ca"}, { "language_id": 6, "language": "Chinese (Simplified)", "language_code": "zh-hans", }, { "language_id": 7, "language": "Chinese (Traditional)", "language_code": "zh-hant", }, {"language_id": 8, "language": "Croatian", "language_code": "hr"}, {"language_id": 9, "language": "Czech", "language_code": "cs"}, ], ) @pytest_asyncio.fixture async def create_release_artist_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 release_artist")) await session.execute( text(""" INSERT INTO release_artist(release_artist_id, release_id, artist_name) VALUES (:release_artist_id, :release_id, :artist_name) """), [ {"release_artist_id": 111, "release_id": "123", "artist_name": "test1"}, {"release_artist_id": 222, "release_id": "123", "artist_name": "test2"}, {"release_artist_id": 333, "release_id": "123", "artist_name": "test3"}, ], ) @pytest_asyncio.fixture async def create_track_artist_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_artist")) await session.execute( text(""" INSERT INTO track_artist(id, track_id, name) VALUES (:id, :track_id, :name) """), [ {"id": 111, "track_id": 12345, "name": "test1"}, {"id": 222, "track_id": 12345, "name": "test2"}, {"id": 333, "track_id": 12345, "name": "test3"}, ], )