from typing import Optional, List from unittest.mock import MagicMock import softest from external_api.playlists.schemas import PlaylistsQuery, PlaylistResults, PlaylistProvider, PlaylistModel from playlists.service import PlaylistsService from external_api.base.search_models import PlaylistImageModel from utils.test_helpers import sync class TestPlaylistsService(softest.TestCase): @sync async def test_get_playlists_by_name_should_return_artists_list(self): async def fetch(query_object: PlaylistsQuery) -> Optional[List[PlaylistResults]]: if query_object.query == "Artst": image1 = PlaylistImageModel(url="http://test.com", width=200, height=300) image2 = PlaylistImageModel(url="http://test1.com", width=800, height=1300) playlist1 = PlaylistModel("id1", "test1", "owner1", [image1]) playlist2 = PlaylistModel("id2", "test2", "owner2", []) playlist3 = PlaylistModel("id3", "test3", "owner3", [image2]) return [ PlaylistResults(playlists=[playlist1, playlist2], provider=PlaylistProvider.Spotify), PlaylistResults(playlists=[playlist3], provider=PlaylistProvider.Apple), ] return [] fetcher = MagicMock() fetcher.fetch.side_effect = fetch sut = PlaylistsService(playlists_fetcher=fetcher) result = await sut.get_playlists_by_name("Artst", 2) self.assertEqual(len(result), 3) self.assertEqual(result[0].id, "id1") self.assertEqual(result[0].name, "test1") self.assertEqual(result[0].ownerName, "owner1") self.assertEqual(len(result[0].images), 1) self.assertEqual(result[0].images[0].url, "http://test.com") self.assertEqual(result[0].images[0].height, 300) self.assertEqual(result[0].images[0].width, 200) self.assertEqual(result[0].provider, "spotify") self.assertEqual(result[1].id, "id2") self.assertEqual(result[1].name, "test2") self.assertEqual(result[1].ownerName, "owner2") self.assertEqual(len(result[1].images), 0) self.assertEqual(result[1].provider, "spotify") self.assertEqual(result[2].id, "id3") self.assertEqual(result[2].name, "test3") self.assertEqual(result[2].ownerName, "owner3") self.assertEqual(len(result[2].images), 1) self.assertEqual(result[2].images[0].url, "http://test1.com") self.assertEqual(result[2].images[0].height, 1300) self.assertEqual(result[2].images[0].width, 800) self.assertEqual(result[2].provider, "apple")