from unittest.mock import AsyncMock from http import HTTPStatus as http_status import pytest from server import config from server.client.clients.dsp_api import DspApiClient from server.client.clients.vendor_api import VendorApiClient from server.constants import DSP from tests.helpers import read_json_from_file @pytest.mark.parametrize( "vendor_data,market", ( ({}, "us"), ({"ra.1055200360": {"id": "ra.1055200360", "data": "d"}}, "global"), ({"ra.32940": {"id": "ra.32940", "f1": "d1"}, "ra.1055200360": {"id": "ra.1055200360", "f2": "d2"}}, "gb"), ), ) async def test_get_stations_summary(vendor_data, market, mocker, client, auth): dsp_response = read_json_from_file("clients/dsp_api/apple_stations_summary_compact") async_dsp_mock = AsyncMock(return_value=dsp_response) get_stations_summary_mock = mocker.patch.object(DspApiClient, "send_request", side_effect=async_dsp_mock) async_vendor_mock = AsyncMock(return_value={"data": list(vendor_data.values())}) get_stations_mock = mocker.patch.object(VendorApiClient, "send_request", side_effect=async_vendor_mock) params = {"isrc": ["USSM19902991", "USSM19902990", "USSM19902990"], "market": market, "min": 20} response = await client.get("/api/stations/summary/", params=params, headers=auth) assert response.status == http_status.OK get_stations_summary_mock.call_args.kwargs["params"]["isrc"] = sorted( get_stations_summary_mock.call_args.kwargs["params"]["isrc"] ) get_stations_summary_mock.assert_called_once_with( "api/analytics/v1/stations-summary", params=dict( isrc=["USSM19902990", "USSM19902991"], vendor=DSP.APPLE.value, market=market, min=20, compact=True, ), ) get_stations_mock.call_args.kwargs["body"]["ids"] = sorted(get_stations_mock.call_args.kwargs["body"]["ids"]) get_stations_mock.assert_called_once_with( "api/apple/v1/stations", body={"ids": ["ra.1055200360", "ra.32940"], "market": market}, data_ttl="43200", dsp=DSP.APPLE, method="POST", ) response = await response.json() for item in dsp_response["items"]: item["data"] = vendor_data.get(item["id"].replace("apple_", "ra.")) assert response == dsp_response