import unittest from unittest.mock import Mock from external_api.base.clients.apollo_client import ApolloClient from external_api.base.clients.client import ApiClient from external_api.playlists.schemas import PlaylistsQuery, PlaylistProvider from tests.test_utils import load_fixture from utils.test_helpers import sync, async_mock class ApolloServiceTest(unittest.TestCase): @sync async def test_apollo_spotify_playlists_search(self): client = ApiClient("https://fake") fixture = load_fixture("external_api/fixtures/spotify_playlists_search.json") response_mock = Mock() response_mock.json = async_mock(return_value=fixture) response_mock.headers = {"Content-Type": "application/json"} client._execute = async_mock(return_value=response_mock) service = ApolloClient(client) results = await service.get_spotify_playlists(PlaylistsQuery("", 2)) self.assertIsNotNone(results) self.assertEqual(len(results.playlists), 2) self.assertEqual(results.provider, PlaylistProvider.Spotify) self.assertEqual(results.playlists[0].id, "0U9IZ3lZuNWKofUtc5n7M1") self.assertEqual(results.playlists[0].name, "FAMOUS TIK TOK SONGS 2020") self.assertEqual(results.playlists[0].owner_name, "saraharain8") self.assertEqual(len(results.playlists[0].images), 1) self.assertEqual(results.playlists[0].images[0].url, "https://scdn.co/ab67706c0000da8494a1d46057da292681efd20b") self.assertEqual(results.playlists[0].images[0].width, 200) self.assertEqual(results.playlists[0].images[0].height, 500) self.assertEqual(results.playlists[1].id, "1Wy0ga1Uzu5YBvWkKyWP50") self.assertEqual(results.playlists[1].name, "Latin Heat") self.assertEqual(results.playlists[1].owner_name, "Filtr Canada ") self.assertEqual(len(results.playlists[1].images), 0) @sync async def test_apollo_apple_playlists_search(self): client = ApiClient("https://fake") fixture = load_fixture("external_api/fixtures/apple_playlists_search.json") response_mock = Mock() response_mock.json = async_mock(return_value=fixture) response_mock.headers = {"Content-Type": "application/json"} client._execute = async_mock(return_value=response_mock) service = ApolloClient(client) results = await service.get_apple_playlists(PlaylistsQuery("", 2)) self.assertIsNotNone(results) self.assertEqual(len(results.playlists), 2) self.assertEqual(results.provider, PlaylistProvider.Apple) self.assertEqual(results.playlists[0].id, "pl.01bbff42daee446ca3d8087dc33720fd") self.assertEqual(results.playlists[0].name, "Inspired by Aaliyah") self.assertEqual(results.playlists[0].owner_name, "Apple Music R&B") self.assertEqual(len(results.playlists[0].images), 1) self.assertEqual(results.playlists[0].images[0].url, "https://is5-ssl.mzstatic.com/640x640cc.jpeg") self.assertEqual(results.playlists[0].images[0].width, 640) self.assertEqual(results.playlists[0].images[0].height, 640) self.assertEqual(results.playlists[1].id, "pl.9f03bfa679414769905e67655c7aebab") self.assertEqual(results.playlists[1].name, "Ad-Rock’s Favorite Songs") self.assertEqual(results.playlists[1].owner_name, "Apple Music") self.assertEqual(len(results.playlists[1].images), 0) if __name__ == "__main__": unittest.main()