from datetime import date 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_apple_info(mocker, client, auth): dates_response = read_json_from_file("clients/dsp_api/public_track_positions_playlists_dates_apple") meta_response = read_json_from_file("clients/dsp_api/public_playlists_info") async_dates_mock = AsyncMock(return_value=dates_response) mocker.patch.object(DspApiClient, "get_public_track_positions_playlists_dates", side_effect=async_dates_mock) async_meta_mock = AsyncMock(return_value=meta_response) mocker.patch.object(DspApiClient, "get_public_playlists_info", side_effect=async_meta_mock) params = { "id": "apple_pl.005c5a0f52744716b0021df43fe61fc6", "market": "us" } expected_response = [ { "country_code": "us", "updated_date": "2022-12-22", "image_url": "https://images-api.atlas.stream/v2/playlists/by_apple_music_id/pl.005c5a0f52744716b0021df43fe61fc6?storefront=us&resolution=medium", "name": "Festival Bangers", "id": "pl.005c5a0f52744716b0021df43fe61fc6", "owner": "Apple Music Dance" } ] response = await client.get("/api/v1/playlists/apple/info/", params=params, headers=auth) assert response.status == HTTPStatus.OK response = await response.json() assert response == expected_response async def test_apple_playlist_meta(mocker, client, auth): dates_response = read_json_from_file("clients/dsp_api/public_track_positions_playlists_dates_apple") meta_response = read_json_from_file("clients/dsp_api/public_playlists_info") async_dates_mock = AsyncMock(return_value=dates_response) mocker.patch.object(DspApiClient, "get_public_track_positions_playlists_dates", side_effect=async_dates_mock) async_meta_mock = AsyncMock(return_value=meta_response) mocker.patch.object(DspApiClient, "get_public_playlists_info", side_effect=async_meta_mock) params = { "playlist_id": "apple_pl.005c5a0f52744716b0021df43fe61fc6", } expected_response = { "name": "Festival Bangers", "latestUpdate": "2022-12-13", "artwork": "https://images-api.atlas.stream/v2/playlists/by_apple_music_id/pl.005c5a0f52744716b0021df43fe61fc6?storefront=us", "tracklistCountryCode": "us", "id": "pl.005c5a0f52744716b0021df43fe61fc6", "owner": { "accountName": "Apple Music Dance", "categoryName": "Apple Curators" }, "appleMusicUpdate": "2022-12-22" } response = await client.get("/api/v1/playlists/apple/", params=params, headers=auth) assert response.status == HTTPStatus.OK response = await response.json() assert response == expected_response async def test_spotify_playlist_meta(mocker, client, auth): dates_response = read_json_from_file("clients/dsp_api/public_track_positions_playlists_dates_spotify") meta_response = read_json_from_file("clients/dsp_api/public_current_playlists_info") async_dates_mock = AsyncMock(return_value=dates_response) mocker.patch.object(DspApiClient, "get_public_track_positions_playlists_dates", side_effect=async_dates_mock) async_meta_mock = AsyncMock(return_value=meta_response) mocker.patch.object(DspApiClient, "get_public_current_playlists_info", side_effect=async_meta_mock) params = { "id": "spotify_03KtvNzoznHQKoaQTql9YX", } expected_response = [{'country_code': 'us', 'followers': 32517349, 'id': '37i9dQZF1DXcBWIGoYBM5M', 'image_url': 'https://images-api.atlas.stream/v2/playlists/by_spotify_id/37i9dQZF1DXcBWIGoYBM5M?resolution=large', 'name': "Today's Top Hits", 'owner': 'Spotify', 'personalized': False, 'updated_date': date.today().isoformat()}] response = await client.get("/api/v1/playlists/spotify/", params=params, headers=auth) assert response.status == HTTPStatus.OK response = await response.json() assert response == expected_response async def test_spotify_analyze(mocker, client, auth): dates_response = read_json_from_file("clients/dsp_api/public_track_positions_playlists_dates_spotify") meta_response = read_json_from_file("clients/dsp_api/public_current_playlists_info") async_dates_mock = AsyncMock(return_value=dates_response) mocker.patch.object(DspApiClient, "get_public_track_positions_playlists_dates", side_effect=async_dates_mock) async_meta_mock = AsyncMock(return_value=meta_response) mocker.patch.object(DspApiClient, "get_public_current_playlists_info", side_effect=async_meta_mock) params = { "playlisturi": "spotify:playlist:03KtvNzoznHQKoaQTql9YX", } expected_response = {'buzzCategoryId': '5', 'countryCode': 'us', 'followers': 32517349, 'id': '37i9dQZF1DXcBWIGoYBM5M', 'imageUrl': 'https://images-api.atlas.stream/v2/playlists/by_spotify_id/37i9dQZF1DXcBWIGoYBM5M', 'name': "Today's Top Hits", 'playlistUri': 'spotify:playlist:37i9dQZF1DXcBWIGoYBM5M', 'tracksLastAdded': '2022-08-19', 'userDisplayName': 'Spotify', 'userId': 'spotify'} response = await client.get("/api/v1/playlists/spotify/analyze/", params=params, headers=auth) assert response.status == HTTPStatus.OK response = await response.json() assert response == expected_response