# import copy # import json # from datetime import date, timedelta # # import pytest # from apollo_utils.service.base_api_client.client import BaseApiClient # # from src.client.clients.dsp_api.utils import get_chart_events, get_delphi_charts_data_as_dict # from src.constants.common import DSP, DELPHI_DSP_PATH # from src.index import job # from src.processings.get_chart_ids_to_process import get_charts_to_process # from src.processings.process_charts import process_charts # from src.helpers import create_apollo_delphi_responses, get_chart_to_process, \ # get_test_charts_current_previous_tracks_data, get_test_track_items, get_test_moves # # # def get_url(request): # url = request.url # index = url.find("api/") # return url[index:] # # # @pytest.mark.parametrize( # "dsp,updated_at,chart_datetime,response_length,to_update", # ( # (DSP.SPOTIFY, None, None, 10, 0), # (DSP.APPLE, None, None, 10, 0), # (DSP.SPOTIFY, date.today().isoformat(), date.today().isoformat(), 0, 0), # (DSP.APPLE, date.today().isoformat(), date.today().isoformat(), 0, 0), # (DSP.SPOTIFY, date.today().isoformat(), (date.today() - timedelta(days=1)).isoformat(), 10, 0), # (DSP.APPLE, date.today().isoformat(), (date.today() - timedelta(days=1)).isoformat(), 10, 0), # (DSP.SPOTIFY, date.today().isoformat(), date.today().isoformat(), 4, 4), # (DSP.APPLE, date.today().isoformat(), date.today().isoformat(), 6, 6), # ), # ) # def test_get_charts_to_process(mocker, dsp, updated_at, chart_datetime, response_length, to_update): # # dsp = DSP.APPLE # # apollo, delphi = create_apollo_delphi_responses( # dsp=dsp, # updated_at=updated_at, # chart_datetime=chart_datetime, # to_update=to_update # ) # # def client_mock(*args, **kwargs): # # url = get_url(args[0]) # if url == "api/charts/monitoring/": # return apollo # if url == f"api/delphi/{DELPHI_DSP_PATH[dsp]}/charts/data-health/status": # return delphi # # mocker.patch.object(BaseApiClient, "_send_request", side_effect=client_mock) # # result = get_charts_to_process(dsp) # # assert len(result) == response_length # # # @pytest.mark.parametrize( # "dsp,tracks_num,additions_removals,position_change,apollo_chart_data,send_request_call_count", # ( # (DSP.SPOTIFY, 10, 3, 11, False, 4), # (DSP.APPLE, 12, 5, 15, False, 4), # (DSP.SPOTIFY, 10, 3, None, False, 4), # (DSP.APPLE, 12, 5, None, False, 4), # (DSP.SPOTIFY, 10, 3, 11, True, 4), # (DSP.APPLE, 12, 5, 15, True, 3), # (DSP.SPOTIFY, 10, 3, None, True, 4), # (DSP.APPLE, 12, 5, None, True, 3), # ), # ) # def test_process_charts( # mocker, dsp, tracks_num, additions_removals, position_change, apollo_chart_data, send_request_call_count # ): # # today_date = date.today() # # charts, previous_date = get_chart_to_process(today_date) # # current, previous = get_test_charts_current_previous_tracks_data(length=tracks_num, split=additions_removals) # # if apollo_chart_data: # charts["chart_to_process"]["data"] = json.dumps({"items": previous}) # # current_mock = copy.deepcopy(current) # previous_mock = copy.deepcopy(previous) # # def client_mock(*args, **kwargs): # # def get_request_params_date(request): # return date.fromisoformat(request.params["date"]) # # req = args[0] # url = get_url(req) # # if url == "api/service/events/" or url == "api/charts/monitoring/": # return {"status": "OK"} # # date_to_compare = get_request_params_date(req) # # if date_to_compare == today_date: # return get_test_track_items(current_mock) # return get_test_track_items(previous_mock) if not position_change\ # else get_test_track_items(get_test_moves(previous_mock, position_change)) # # mocked_send_request = mocker.patch.object(BaseApiClient, "_send_request", side_effect=client_mock) # # additions, removals, moves, processed_datetime = get_chart_events( # get_delphi_charts_data_as_dict( # get_test_track_items(current) # ), get_delphi_charts_data_as_dict( # get_test_track_items(previous) if not position_change # else get_test_track_items( # get_test_moves(previous, position_change) # ) # ) # ) # # assert len(additions) == additions_removals # assert len(removals) == additions_removals # if position_change: # assert len(moves) == tracks_num - 2*additions_removals # # process_charts(dsp, charts) # # assert mocked_send_request.call_count == send_request_call_count # # # def test_job(mocker): # # mock_charts_to_process = mocker.patch("index.get_charts_to_process") # mock_charts_to_process.return_value = {} # # mock_process_charts = mocker.patch("index.process_charts") # mock_process_charts.return_value = None # job()