import copy from http import HTTPStatus import pytest from apollo_utils.core.constants.dsp import DSP from apollo_utils.core.utils.singleton import SingleValue from server.client.clients.dsp_api import DspApiClient from tests.api.playlists.v1.responses.generate_delphi_response import get_delphi_playlists_api_response from tests.api.playlists.v1.responses.get_expected_response import get_playlists_amazon_track_expected_response response_copy = SingleValue() params_copy = SingleValue() def set_response_copy_variable_global(f): async def wrapped(*args, **kwargs): global response_copy global params_copy result = await f(*args, **kwargs) response_copy = copy.deepcopy(result) params_copy = kwargs["params"] return result return wrapped @pytest.mark.parametrize( "params,status_code", ( ( {"isrc": "USSM12200609"}, HTTPStatus.BAD_REQUEST, ), ( {"playlist_id": "B084JBKF4F:173_us"}, HTTPStatus.BAD_REQUEST, ), ( {"isrc": "USSM12200609", "playlist_id": "B084JBKF4F:173_us"}, HTTPStatus.OK, ), ), ) async def test_get_playlists_amazon_track( mocker, client, auth, params: dict, status_code: HTTPStatus ): amazon_playlist_id = None if params.get("playlist_id"): amazon_playlist_id = params["playlist_id"] @set_response_copy_variable_global async def async_dsp_mock(url, *args, **kwargs): return get_delphi_playlists_api_response( url=url, dsp=DSP.AMAZON, amazon_playlist_id=amazon_playlist_id, **kwargs ) mocker.patch.object(DspApiClient, "send_request", side_effect=async_dsp_mock) response = await client.get(f"/api/playlists/amazon/track/", params=params, headers=auth) response_status = response.status assert response_status == status_code if response_status == HTTPStatus.OK: expected_response = get_playlists_amazon_track_expected_response( item=response_copy["items"][0], isrc=params["isrc"], playlist_id=params["playlist_id"] ) actual_response_json = await response.json() assert actual_response_json == expected_response