import datetime from http import HTTPStatus from unittest.mock import AsyncMock from server.client.clients.dsp_api import DspApiClient from tests.helpers import read_json_from_file async def test_current_track_in_playlist_spotify(mocker, client, auth): base_response = read_json_from_file("clients/dsp_api/track_positions_playlists_current_tracklist") playlist_response = read_json_from_file("clients/dsp_api/public_current_playlists_info") async_base_mock = AsyncMock(return_value=base_response) mocker.patch.object(DspApiClient, "get_public_track_positions_playlists_current_tracklist", side_effect=async_base_mock) async_playlist_mock = AsyncMock(return_value=playlist_response) mocker.patch.object(DspApiClient, "get_public_current_playlists_info", side_effect=async_playlist_mock) params = { "playlist_id": "spotify_37i9dQZF1DXcBWIGoYBM5M", "isrc": "USRC12201440", "market": "us", "playlist_type": "current" } expected_response = { "playlist_image": "https://images-api.atlas.stream/v2/playlists/by_spotify_id/37i9dQZF1DXcBWIGoYBM5M?resolution=large", "added_date": "2022-12-19", "country_code": "us", "playlist_id": "37i9dQZF1DXcBWIGoYBM5M", "removed_date": None, "changed_date": datetime.date.today().isoformat(), "trend": 7, "personalized": False, "current_position": 38, "is_new": False, "playlist_name": "Today's Top Hits", "previous_position": 31, "isrc": "USRC12201440" } response = await client.get("/api/v2/playlists/spotify/track/", params=params, headers=auth) assert response.status == HTTPStatus.OK response = await response.json() assert response == expected_response async def test_previous_track_in_playlist_spotify(mocker, client, auth): base_response = read_json_from_file("clients/dsp_api/track_positions_previous_playlists_spotify") async_base_mock = AsyncMock(return_value=base_response) mocker.patch.object(DspApiClient, "get_public_track_positions_previous_playlists", side_effect=async_base_mock) params = { "playlist_id": "spotify_03KtvNzoznHQKoaQTql9YX", "isrc": "USUM72004315", "market": "global", "playlist_type": "past" } expected_response = { "playlist_image": "https://images-api.atlas.stream/v2/playlists/by_spotify_id/37i9dQZF1DWUJcZpQ1337Z?resolution=large", "added_date": '2022-12-19', "country_code": "global", "playlist_id": "37i9dQZF1DWUJcZpQ1337Z", "removed_date": "2022-11-30", "changed_date": "1970-01-01", "trend": None, "personalized": False, "current_position": None, "is_new": False, "playlist_name": "Top Songs Italia 2022", "previous_position": None, "isrc": "USUM72004315" } response = await client.get("/api/v2/playlists/spotify/track/", params=params, headers=auth) assert response.status == HTTPStatus.OK response = await response.json() assert response == expected_response async def test_current_track_in_playlist_apple(mocker, client, auth): base_response = read_json_from_file("clients/dsp_api/track_positions_playlists") async_base_mock = AsyncMock(return_value=base_response) mocker.patch.object(DspApiClient, "get_public_track_positions_playlists", side_effect=async_base_mock) params = { "playlist_id": "apple_pl.fde851dc95ce4ffbb74028dfd254ced5", "isrc": "USSM12103949", "market": "ch", "playlist_type": "current" } expected_response = { "playlist_image": "https://images-api.atlas.stream/v2/playlists/by_apple_music_id/pl.fde851dc95ce4ffbb74028dfd254ced5?storefront=ch&resolution=large", "added_date": '2022-10-29', "country_code": "ch", "playlist_id": "pl.fde851dc95ce4ffbb74028dfd254ced5", "removed_date": None, "changed_date": "2022-12-19", "trend": 6, "personalized": False, "current_position": 95, "is_new": False, "playlist_name": "Top 100: China", "previous_position": 89, "isrc": "USSM12103949" } response = await client.get("/api/v2/playlists/apple/track/", params=params, headers=auth) assert response.status == HTTPStatus.OK response = await response.json() assert response == expected_response async def test_previous_track_in_playlist_apple(mocker, client, auth): base_response = read_json_from_file("clients/dsp_api/track_positions_previous_playlists_apple") async_base_mock = AsyncMock(return_value=base_response) mocker.patch.object(DspApiClient, "get_public_track_positions_previous_playlists", side_effect=async_base_mock) params = { "playlist_id": "apple_pl.fde851dc95ce4ffbb74028dfd254ced5", "isrc": "USSM12103949", "market": "ch", "playlist_type": "past" } expected_response = { "playlist_image": "https://images-api.atlas.stream/v2/playlists/by_apple_music_id/pl.fde851dc95ce4ffbb74028dfd254ced5?storefront=ch&resolution=large", "added_date": '2022-12-19', "country_code": "ch", "playlist_id": "pl.fde851dc95ce4ffbb74028dfd254ced5", "removed_date": "2022-12-19", "changed_date": "1970-01-01", "trend": None, "personalized": False, "current_position": None, "is_new": False, "playlist_name": "Top 100: China", "previous_position": None, "isrc": "USSM12103949" } response = await client.get("/api/v2/playlists/apple/track/", params=params, headers=auth) assert response.status == HTTPStatus.OK response = await response.json() assert response == expected_response