from typing import Optional from unittest.mock import MagicMock import softest from external_api.base.clients.delphi_client import DelphiArtistsListResponse, DelphiArtistModel, DelphiImage from external_api.base.analytics_models import ArtistsQuery from artists.services.artists_service import ArtistsService from utils.test_helpers import sync class TestArtistsService(softest.TestCase): @sync async def test_get_artists_by_name_should_return_artists_list(self): async def search_for_artists(query_object: ArtistsQuery) -> Optional[DelphiArtistsListResponse]: if query_object.query == "Artst": image = DelphiImage(uri="http://image.jpg", height=700, width=300) marko = DelphiArtistModel("GRAS_1754677", "Marko", "Polo", "Marko A Polo", image, 30, "http://123.com") ricardo = DelphiArtistModel("GRAS_677", "Ricardo", "", "Ricardo", None, 90, "http://ricardo.com") return DelphiArtistsListResponse(2, [marko, ricardo]) return DelphiArtistsListResponse(0, []) delphi_client_mock = MagicMock() delphi_client_mock.search_for_artists.side_effect = search_for_artists sut = ArtistsService(delphi_client=delphi_client_mock) result = await sut.get_artists_by_name("Artst", 2, 0) self.assertEqual(len(result), 2) self.assertEqual(result[0].id, "GRAS_1754677") self.assertEqual(result[0].name, "Marko A Polo") self.assertEqual(result[0].image.url, "http://image.jpg") self.assertEqual(result[0].image.height, 700) self.assertEqual(result[0].image.width, 300) self.assertEqual(result[1].id, "GRAS_677") self.assertEqual(result[1].name, "Ricardo") self.assertTrue(result[1].image is None) @sync async def test_get_artists_by_name_no_artists_should_return_empty_list(self): async def search_for_artists(query_object: ArtistsQuery) -> Optional[DelphiArtistsListResponse]: if query_object.query == "BDjdbvskvbsasqw": return DelphiArtistsListResponse(0, []) return DelphiArtistsListResponse(0, [DelphiArtistModel("1", "", "", "Ricardo", None, 0, None)]) delphi_client_mock = MagicMock() delphi_client_mock.search_for_artists.side_effect = search_for_artists sut = ArtistsService(delphi_client=delphi_client_mock) result = await sut.get_artists_by_name("BDjdbvskvbsasqw", 1, 0) self.assertEqual(len(result), 0)