import pytest from copy import deepcopy from server.track.models import TrackExternalLinks, TrackTiktokVideos, TrackYoutubeVideos, TrackSearchData from server.artist.models import ArtistSpotifyTracks, ArtistSoundCloudTracks from tests.constants import ( TRACK_SEARCH_QUERY_BODY_LIKES_LIKES_STREAMS_PLAYS, TRACK_TIKTOK_SEARCH_BODY, TRACK_YOUTUBE_SEARCH_BODY, TRACK_SPOTIFY_SEARCH_BODY, TRACK_SOUNDCLOUD_SEARCH_BODY, TRACK_SEARCH_BY_NAME_BODY, TRACK_SEARCH_BY_NAME_BODY_FULL_MATCH, TRACK_SEARCH_BY_NAME_BODY_NON_EXIST_NAME, TRACK_SEARCH_BY_NAME_BODY_UNKNOWN_FIELD, TRACK_SEARCH_EXPECTED_RETURN_DATA_LIKES_LIKES_STREAM_PLAYS_CHARTS, TRACK_SEARCH_EXPECTED_RETURN_DATA_VIEWS_VIEWS_CHARTS, TRACK_SEARCH_EXPECTED_RETURN_DATA_TIKTOK, TRACK_SEARCH_EXPECTED_RETURN_DATA_YOUTUBE, TRACK_SEARCH_EXPECTED_RETURN_DATA_SPOTIFY, TRACK_SEARCH_EXPECTED_RETURN_DATA_SOUNDCLOUD, TRACK_11160650_SEARCH_RESULT_EXPECTED_DATA, TRACK_SEARCH_13496071_FILTERED, TRACK_SEARCH_11160650_13692288_FILTERED, TRACK_SEARCH_11160650_FILTERED, TRACK_SEARCH_13496071_13692288_FILTERED, TRACK_SEARCH_11160650_13496071_13698092_FILTERED, TRACK_SEARCH_13496071_13698092_FILTERED, TRACK_SEARCH_ALL_FILTERED, TRACK_SEARCH_TIKTOK_FILTERED, NAME_LENGTH_ERROR_EXPECTED_DATA, SEARCH_BY_NAME_BODY_LONG_NAME_VALUE, TRACK_CHART_TYPE_MAPPER, GENRES_LIST, ARTISTS_4046_SPOTIFY_TRACKS_DATA_TO_INSERT, TRACK_13698092_TRACKS_SPOTIFY_EXPECTED_DATA, TRACK_18132000_VIDEOS_TIKTOK_DATA_TO_INSERT, TRACK_18132000_VIDEOS_TIKTOK_EXPECTED_DATA, TRACK_68724000_VIDEOS_YOUTUBE_DATA_TO_INSERT, TRACK_68724000_VIDEOS_YOUTUBE_EXPECTED_DATA, TRACK_68724000_TRACKS_SOUNDCLOUD_EXPECTED_DATA, ARTIST_1942_TRACKS_SOUNDCLOUD_DATA_TO_INSERT, TRACK_49509760_EXTERNAL_LINKS_DATA_TO_INSERT, TRACK_49509760_EXTERNAL_LINKS_EXPECTED_DATA, HEADER_GROUP, TRACK_SEARCH_BY_NAME_EXPECTED_DATA, TRACK_SEARCH_BY_NAME_EXPECTED_DATA_FULL_MATCH, UNKNOWN_FIELDS_EXPECTED_DATA, TRACK_GENRES_SEARCH_BODY, TRACK_COUNTRIES_SEARCH_BODY, TRACK_GENRES_COUNTRIES_SEARCH_BODY, TRACK_SEARCH_EXPECTED_RETURN_DATA_GENRES, TRACK_SEARCH_EXPECTED_RETURN_DATA_COUNTRIES, TRACK_SEARCH_EXPECTED_RETURN_DATA_GENRES_COUNTRIES, ) from tests.dna.category.constants import TRACK_ES_DATA_TO_INSERT, TRACK_PG_DATA_TO_INSERT TRACK_SEARCH_QUERY_BODY_VIEWS_VIEWS_LISTENERS_COMMENTS = deepcopy(TRACK_SEARCH_QUERY_BODY_LIKES_LIKES_STREAMS_PLAYS) TRACK_SEARCH_QUERY_BODY_VIEWS_VIEWS_LISTENERS_COMMENTS["tiktok"]["chart_type"] = "VIEWS" TRACK_SEARCH_QUERY_BODY_VIEWS_VIEWS_LISTENERS_COMMENTS["youtube"]["chart_type"] = "VIEWS" TRACK_SEARCH_QUERY_BODY_VIEWS_VIEWS_LISTENERS_COMMENTS["spotify"]["chart_type"] = "MONTHLY_LISTENERS" TRACK_SEARCH_QUERY_BODY_VIEWS_VIEWS_LISTENERS_COMMENTS["soundcloud"]["chart_type"] = "COMMENTS" TRACK_SEARCH_QUERY_BODY_VIEWS_VIEWS_LISTENERS_COMMENTS.pop("limit") TRACK_SEARCH_QUERY_BODY_VIEWS_VIEWS_LISTENERS_COMMENTS.pop("offset") class TestTrack: @pytest.mark.parametrize( "expected_return_data, query_body, elastic_client, aggregates_postgres_client", [ ( TRACK_SEARCH_EXPECTED_RETURN_DATA_LIKES_LIKES_STREAM_PLAYS_CHARTS, TRACK_SEARCH_QUERY_BODY_LIKES_LIKES_STREAMS_PLAYS, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( TRACK_SEARCH_EXPECTED_RETURN_DATA_VIEWS_VIEWS_CHARTS, TRACK_SEARCH_QUERY_BODY_VIEWS_VIEWS_LISTENERS_COMMENTS, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( TRACK_SEARCH_EXPECTED_RETURN_DATA_TIKTOK, TRACK_TIKTOK_SEARCH_BODY, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( TRACK_SEARCH_EXPECTED_RETURN_DATA_YOUTUBE, TRACK_YOUTUBE_SEARCH_BODY, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( TRACK_SEARCH_EXPECTED_RETURN_DATA_SPOTIFY, TRACK_SPOTIFY_SEARCH_BODY, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( TRACK_SEARCH_EXPECTED_RETURN_DATA_SOUNDCLOUD, TRACK_SOUNDCLOUD_SEARCH_BODY, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( TRACK_SEARCH_EXPECTED_RETURN_DATA_GENRES, TRACK_GENRES_SEARCH_BODY, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( TRACK_SEARCH_EXPECTED_RETURN_DATA_COUNTRIES, TRACK_COUNTRIES_SEARCH_BODY, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( TRACK_SEARCH_EXPECTED_RETURN_DATA_GENRES_COUNTRIES, TRACK_GENRES_COUNTRIES_SEARCH_BODY, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ], indirect=["elastic_client", "aggregates_postgres_client"], ) async def test_discovery( self, expected_return_data, query_body, elastic_client, aggregates_postgres_client, app_client, auth_header ): response = await app_client.post("/api/track/discovery", headers=auth_header, json=query_body) assert await response.json() == expected_return_data @pytest.mark.parametrize( "url, query_body, expected_status, expected_return_data, elastic_client, aggregates_postgres_client", [ ( "/api/track/discovery", {"tiktok": {"min_posts_latest": 1000}}, 200, TRACK_SEARCH_13496071_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"max_posts_latest": 1000}}, 200, TRACK_SEARCH_11160650_13692288_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"min_views": 10000}}, 200, TRACK_SEARCH_13496071_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"max_views": 10000}}, 200, TRACK_SEARCH_11160650_13692288_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"min_likes": 10000}}, 200, TRACK_SEARCH_13496071_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"max_likes": 10000}}, 200, TRACK_SEARCH_11160650_13692288_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"min_comments": 10000}}, 200, TRACK_SEARCH_13496071_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"max_comments": 10000}}, 200, TRACK_SEARCH_11160650_13692288_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"min_comments": 10000}}, 200, TRACK_SEARCH_13496071_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"max_comments": 10000}}, 200, TRACK_SEARCH_11160650_13692288_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"min_mentions": 1}}, 200, TRACK_SEARCH_11160650_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {"max_mentions": 1}}, 200, TRACK_SEARCH_13496071_13692288_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", { "tiktok": { "min_views": 1000, "max_views": 1000000, } }, 200, TRACK_SEARCH_11160650_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"youtube": {"min_videos": 1}}, 200, TRACK_SEARCH_11160650_13496071_13698092_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"youtube": {"min_videos": 1, "min_views": 1000000}}, 200, TRACK_SEARCH_13496071_13698092_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", { "spotify": { "min_monthly_listeners": 1000, }, "soundcloud": {"min_likes": 100}, }, 200, TRACK_SEARCH_13496071_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {}, 200, TRACK_SEARCH_ALL_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", {"tiktok": {}}, 200, TRACK_SEARCH_TIKTOK_FILTERED, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", {"tiktok": {"min_posts_latest": 1000}}, 200, {"total_count": len(TRACK_SEARCH_13496071_FILTERED)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", {"tiktok": {"max_posts_latest": 1000}}, 200, {"total_count": len(TRACK_SEARCH_11160650_13692288_FILTERED)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", {"tiktok": {"min_views": 10000}}, 200, {"total_count": len(TRACK_SEARCH_13496071_FILTERED)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", {"tiktok": {"max_views": 10000}}, 200, {"total_count": len(TRACK_SEARCH_11160650_13692288_FILTERED)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", {"youtube": {"min_videos": 1, "min_views": 1000000}}, 200, {"total_count": len(TRACK_SEARCH_13496071_13698092_FILTERED)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", { "spotify": { "min_monthly_listeners": 1000, }, "soundcloud": {"min_likes": 100}, }, 200, {"total_count": len(TRACK_SEARCH_13496071_FILTERED)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", TRACK_GENRES_SEARCH_BODY, 200, {"total_count": len(TRACK_SEARCH_EXPECTED_RETURN_DATA_GENRES)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", TRACK_COUNTRIES_SEARCH_BODY, 200, {"total_count": len(TRACK_SEARCH_EXPECTED_RETURN_DATA_COUNTRIES)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", TRACK_GENRES_COUNTRIES_SEARCH_BODY, 200, {"total_count": len(TRACK_SEARCH_EXPECTED_RETURN_DATA_GENRES_COUNTRIES)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", {}, 200, {"total_count": len(TRACK_SEARCH_ALL_FILTERED)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", {"tiktok": {}}, 200, {"total_count": len(TRACK_SEARCH_TIKTOK_FILTERED)}, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ], indirect=["elastic_client", "aggregates_postgres_client"], ) async def test_discovery_not_all_search_param( self, url, query_body, expected_status, expected_return_data, elastic_client, aggregates_postgres_client, app_client, auth_header, ): response = await app_client.post(url, headers=auth_header, json=query_body) assert expected_status == response.status response = await response.json() assert expected_return_data == response @pytest.mark.parametrize( "url, query_body, expected_status, elastic_client, aggregates_postgres_client", [ ( "/api/track/discovery", TRACK_TIKTOK_SEARCH_BODY, 422, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", TRACK_YOUTUBE_SEARCH_BODY, 422, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", TRACK_SPOTIFY_SEARCH_BODY, 422, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery", TRACK_SOUNDCLOUD_SEARCH_BODY, 422, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", TRACK_TIKTOK_SEARCH_BODY, 422, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", TRACK_YOUTUBE_SEARCH_BODY, 422, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", TRACK_SPOTIFY_SEARCH_BODY, 422, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( "/api/track/discovery/total_count", TRACK_SOUNDCLOUD_SEARCH_BODY, 422, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ], indirect=["elastic_client", "aggregates_postgres_client"], ) async def test_discovery_check_query_body( self, url, query_body, expected_status, elastic_client, aggregates_postgres_client, app_client, auth_header ): query_body = query_body.copy() expected_return_data = {} for key in query_body: for item in query_body[key]: query_body[key][item] = "test_string" if item == "chart_type": expected_return_data[item] = TRACK_CHART_TYPE_MAPPER[key] continue expected_return_data[item] = ["Not a valid integer."] if item == "genre": expected_return_data[item] = GENRES_LIST continue response = await app_client.post(url, headers=auth_header, json=query_body) assert expected_return_data == await response.json() assert expected_status == response.status @pytest.mark.parametrize( "expected_return_data, expected_status, id, elastic_client, aggregates_postgres_client", [ ( TRACK_11160650_SEARCH_RESULT_EXPECTED_DATA, 200, 11160650, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ( None, 404, 1111111111, # non-exist id (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (TrackSearchData, deepcopy(TRACK_PG_DATA_TO_INSERT)), ), ], indirect=["elastic_client", "aggregates_postgres_client"], ) async def test_discovery_track_result( self, expected_return_data, expected_status, id, elastic_client, aggregates_postgres_client, app_client, auth_header, ): response = await app_client.get(f"/api/track/{id}/discovery_result", headers=auth_header) assert expected_return_data == await response.json() assert expected_status == response.status @pytest.mark.parametrize( "expected_return_data, id, elastic_client, aggregates_postgres_client", [ ( TRACK_13698092_TRACKS_SPOTIFY_EXPECTED_DATA, 13698092, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (ArtistSpotifyTracks, deepcopy(ARTISTS_4046_SPOTIFY_TRACKS_DATA_TO_INSERT)), ), ( [], 1111111111, # non-exist id (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (ArtistSpotifyTracks, deepcopy(ARTISTS_4046_SPOTIFY_TRACKS_DATA_TO_INSERT)), ), ], indirect=["elastic_client", "aggregates_postgres_client"], ) async def test_tracks_spotify( self, expected_return_data, id, elastic_client, aggregates_postgres_client, app_client, auth_header ): response = await app_client.get(f"/api/v2/track/{id}/tracks/spotify", headers=auth_header) assert expected_return_data == await response.json() @pytest.mark.parametrize( "expected_return_data, id, aggregates_postgres_client", [ ( TRACK_18132000_VIDEOS_TIKTOK_EXPECTED_DATA, 18132000, (TrackTiktokVideos, deepcopy(TRACK_18132000_VIDEOS_TIKTOK_DATA_TO_INSERT)), ), ( [], 1111111111, # non-exist id (TrackTiktokVideos, deepcopy(TRACK_18132000_VIDEOS_TIKTOK_DATA_TO_INSERT)), ), ], indirect=["aggregates_postgres_client"], ) async def test_videos_tiktok(self, expected_return_data, id, aggregates_postgres_client, app_client, auth_header): response = await app_client.get(f"/api/v2/track/{id}/videos/tiktok", headers=auth_header) assert expected_return_data == await response.json() @pytest.mark.parametrize( "expected_return_data, id, aggregates_postgres_client", [ ( TRACK_68724000_VIDEOS_YOUTUBE_EXPECTED_DATA, 68724000, (TrackYoutubeVideos, deepcopy(TRACK_68724000_VIDEOS_YOUTUBE_DATA_TO_INSERT)), ), ( [], 1111111111, # non-exist id (TrackYoutubeVideos, deepcopy(TRACK_68724000_VIDEOS_YOUTUBE_DATA_TO_INSERT)), ), ], indirect=["aggregates_postgres_client"], ) async def test_videos_youtube(self, expected_return_data, id, aggregates_postgres_client, app_client, auth_header): response = await app_client.get(f"/api/v2/track/{id}/videos/youtube", headers=auth_header) assert expected_return_data == await response.json() @pytest.mark.parametrize( "expected_return_data, id, elastic_client, aggregates_postgres_client", [ ( TRACK_68724000_TRACKS_SOUNDCLOUD_EXPECTED_DATA, 11160650, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (ArtistSoundCloudTracks, deepcopy(ARTIST_1942_TRACKS_SOUNDCLOUD_DATA_TO_INSERT)), ), ( [], 1111111111, # non-exist id (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), (ArtistSoundCloudTracks, deepcopy(ARTIST_1942_TRACKS_SOUNDCLOUD_DATA_TO_INSERT)), ), ], indirect=["elastic_client", "aggregates_postgres_client"], ) async def test_tracks_soundcloud( self, expected_return_data, id, elastic_client, aggregates_postgres_client, app_client, auth_header ): response = await app_client.get(f"/api/v2/track/{id}/tracks/soundcloud", headers=auth_header) assert expected_return_data == await response.json() @pytest.mark.parametrize( "expected_return_data, id, aggregates_postgres_client", [ ( TRACK_49509760_EXTERNAL_LINKS_EXPECTED_DATA, 49509760, (TrackExternalLinks, deepcopy(TRACK_49509760_EXTERNAL_LINKS_DATA_TO_INSERT)), ), ( None, 1111111111, # non-exist id (TrackExternalLinks, deepcopy(TRACK_49509760_EXTERNAL_LINKS_DATA_TO_INSERT)), ), ], indirect=["aggregates_postgres_client"], ) async def test_external_links(self, expected_return_data, id, aggregates_postgres_client, app_client, auth_header): response = await app_client.get(f"/api/v4/track/{id}/external_links", headers=auth_header) assert expected_return_data == await response.json() @pytest.mark.parametrize( "expected_data, id, aggregates_postgres_client", [ ( TRACK_49509760_EXTERNAL_LINKS_EXPECTED_DATA, 49509760, (TrackExternalLinks, deepcopy(TRACK_49509760_EXTERNAL_LINKS_DATA_TO_INSERT)), ), ], indirect=["aggregates_postgres_client"], ) async def test_external_links_check_header_order( self, expected_data, id, aggregates_postgres_client, app_client, auth_header ): response = await app_client.get(f"/api/v4/track/{id}/external_links", headers=auth_header) result = await response.json() assert expected_data == result header_group = [items["name"] for items in result["header"]] expected_dsp = [HEADER_GROUP[idx] for idx in [HEADER_GROUP.index(dsp) for dsp in header_group]] assert expected_dsp == header_group @pytest.mark.parametrize( "expected_return_data, query_body, elastic_client", [ ( TRACK_SEARCH_BY_NAME_EXPECTED_DATA, TRACK_SEARCH_BY_NAME_BODY, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), ), ( TRACK_SEARCH_BY_NAME_EXPECTED_DATA_FULL_MATCH, TRACK_SEARCH_BY_NAME_BODY_FULL_MATCH, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), ), ( [], TRACK_SEARCH_BY_NAME_BODY_NON_EXIST_NAME, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), ), ( UNKNOWN_FIELDS_EXPECTED_DATA, TRACK_SEARCH_BY_NAME_BODY_UNKNOWN_FIELD, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), ), ( NAME_LENGTH_ERROR_EXPECTED_DATA, SEARCH_BY_NAME_BODY_LONG_NAME_VALUE, (("track_search", deepcopy(TRACK_ES_DATA_TO_INSERT)),), ), ], indirect=["elastic_client"], ) async def test_search_by_name(self, expected_return_data, query_body, elastic_client, app_client, auth_header): response = await app_client.get("/api/track/search_by_name", headers=auth_header, params=query_body) assert expected_return_data == await response.json()