"""Unit tests for API response.""" import pytest from src.common.types import ApiRequestType from src.common.types import RequestType from src.common.types import Store from src.logic import api_response from src.logic.api_response import \ apple_music_api_get_artist_by_id_response from src.logic.api_response import \ apple_music_api_product_artists_search_response from src.models.apple_music import AppleMusicAlbumArtist from src.models.apple_music import AppleMusicAlbumArtistMessage from src.models.apple_music import AppleMusicGetArtistForAlbumPayload from src.models.apple_music import AppleMusicGetArtistForAlbumRequest @pytest.fixture def producer(mocker): """Mock produce method for the Kafka producer.""" return mocker.patch.object(api_response, 'producer') @pytest.fixture def apple_music_album_api_response(): """Generate Apple Music API response mock.""" return { 'data': [ { 'id': '1654015511', 'relationships': { 'artists': { 'data': [ { 'id': '1654015680', } ] } } } ] } def test_submit_apple_music_api_product_artists_search_response( producer, apple_music_search_album_by_upc_request, apple_music_album_api_response): """Test submit_apple_music_api_product_artists_search_response handler.""" request = apple_music_search_album_by_upc_request response = apple_music_album_api_response apple_music_api_product_artists_search_response(request, response) resp_artist = response['data'][0]['relationships']['artists']['data'][0] request_type = ApiRequestType( store=Store.APPLE_MUSIC, type=RequestType.get_album_artist_by_id) payload = AppleMusicGetArtistForAlbumPayload( **{'id': resp_artist['id'], **request.payload.dict()}) artist_message = AppleMusicGetArtistForAlbumRequest( request_type=request_type, payload=payload) producer.produce.assert_called_once_with( topic='stream.storeAPIRequest.appleMusic.split', event_key=None, event_value=artist_message.json(), callback=None) @pytest.fixture def apple_music_get_album_artist_by_id(): """Apple Music search album by UPC record fixture.""" return { 'api_request': { 'store': 'APPLE_MUSIC', 'type': 'GET_ALBUM_ARTIST_BY_ID', }, 'payload': { 'id': '123', 'product_id': 1, 'upc': 2, 'vendor_id': 3, 'subaccount_id': 4, } } @pytest.fixture def apple_music_get_album_artist_by_id_request( apple_music_get_album_artist_by_id): """Search request model mock.""" record = apple_music_get_album_artist_by_id request_type = ApiRequestType( store=record['api_request']['store'], type=record['api_request']['type']) return AppleMusicGetArtistForAlbumRequest( request_type=request_type, payload=AppleMusicGetArtistForAlbumPayload( id=record['payload']['id'], product_id=record['payload']['product_id'], upc=record['payload']['upc'], vendor_id=record['payload']['vendor_id'], subaccount_id=record['payload']['subaccount_id'], ) ) @pytest.fixture def apple_music_artist_api_response(): """Generate Apple Music API response mock.""" return { 'data': [ { 'id': '1654015511', 'attributes': { 'name': 'My Artist' } } ] } def test_apple_music_api_get_artist_by_id_response( producer, apple_music_get_album_artist_by_id_request, apple_music_artist_api_response): """Test submit_apple_music_api_product_artists_search_response handler.""" request = apple_music_get_album_artist_by_id_request response = apple_music_artist_api_response apple_music_api_get_artist_by_id_response(request, response) resp_artist = response['data'][0] artist = AppleMusicAlbumArtist( id=resp_artist['id'], name=resp_artist['attributes']['name']) artist_message = AppleMusicAlbumArtistMessage( api_request=request, artist=artist) producer.produce.assert_called_once_with( 'event.applemusicapi.album.artist', f'product-{request.payload.product_id}', artist_message.json(), None)