"""Unit tests for the Apple Music service layer.""" import pytest from pytest_mock import MockerFixture from contributor.connectors.apple_music import AppleArtist @pytest.fixture def apple_artist(): return AppleArtist( identifier="123456", name="Test Artist", genres=["Pop", "Rock"], url="https://music.apple.com/artist/123456", ) @pytest.fixture def mock_apple_music_client(mocker: MockerFixture): return mocker.patch("contributor.logic.service.apple_music._apple_music_client") class TestArtistSearch: @pytest.fixture(autouse=True) def _setup(self, mock_apple_music_client): self.client = mock_apple_music_client def test_returns_artists(self, apple_artist: AppleArtist): self.client.search.return_value = [apple_artist] from contributor.logic.service.apple_music import artist_search result = artist_search(query="test", limit=10, offset=0, localization="en") assert result == [apple_artist] def test_passes_arguments_to_client(self, apple_artist: AppleArtist): self.client.search.return_value = [apple_artist] from contributor.logic.service.apple_music import artist_search artist_search(query="test query", limit=5, offset=10, localization="fr") self.client.search.assert_called_once_with( query="test query", limit=5, offset=10, localization="fr", ) def test_returns_empty_list_when_no_results(self): self.client.search.return_value = [] from contributor.logic.service.apple_music import artist_search result = artist_search( query="nonexistent", limit=10, offset=0, localization=None ) assert result == [] class TestGetArtistById: @pytest.fixture(autouse=True) def _setup(self, mock_apple_music_client): self.client = mock_apple_music_client def test_returns_artist(self, apple_artist: AppleArtist): self.client.get_artist_by_id.return_value = apple_artist from contributor.logic.service.apple_music import get_artist_by_id result = get_artist_by_id("123456") assert result == apple_artist def test_passes_artist_id_to_client(self, apple_artist: AppleArtist): self.client.get_artist_by_id.return_value = apple_artist from contributor.logic.service.apple_music import get_artist_by_id get_artist_by_id("123456") self.client.get_artist_by_id.assert_called_once_with(artist_id="123456") def test_returns_none_when_not_found(self): self.client.get_artist_by_id.return_value = None from contributor.logic.service.apple_music import get_artist_by_id result = get_artist_by_id("unknown") assert result is None