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.base.search_models import Track, ExternalIds, Album, TrackArtist, AssetImage from external_api.tracks_search.search_service import ApolloSearchService, map_track, map_album from tests.test_utils import load_fixture from utils.test_helpers import sync, async_mock class SearchServiceTestCase(unittest.TestCase): @sync async def test_apollo_search(self): client = ApiClient("https://fake") fixture = load_fixture("external_api/fixtures/apollo_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 = ApolloSearchService(ApolloClient(client)) results = await service.search("ac") self.assertIsNotNone(results) def test_map_track(self): track = Track( id="track_id", name="name", external_ids=ExternalIds(isrc="isrc"), album=Album( id="album_id", name="demo_album", artists=[TrackArtist(name="artist")], images=[AssetImage(url="image_url", height=100, width=200)], tracks=None, ), ) item = map_track(track) self.assertEqual(item.type, "track") self.assertEqual(item.apollo_id, track.id) self.assertEqual(item.title, track.name) self.assertEqual(item.artist, track.album.artists[0].name) self.assertEqual(item.external_id, track.external_ids.isrc) self.assertEqual(item.cover_url, track.album.images[0].url) def test_map_album(self): album = Album( id="album_id", name="demo_album", artists=[TrackArtist(name="artist")], images=[AssetImage(url="image_url", height=100, width=200)], tracks=None, ) item = map_album(album) self.assertEqual(item.type, "album") self.assertEqual(item.apollo_id, album.id) self.assertEqual(item.title, album.name) self.assertEqual(item.artist, album.artists[0].name) self.assertEqual(item.external_id, album.id) self.assertEqual(item.cover_url, album.images[0].url) if __name__ == "__main__": unittest.main()