import pytest import requests_mock from juno_monitoring import config from juno_monitoring.clients.apollo_api import ApolloClientConfig from juno_monitoring.clients.dsp_api import DspClientConfig from juno_monitoring.clients.user_data_api import UserDataClientConfig from juno_monitoring.handler import handler from juno_monitoring.logger import get_logger def get_history_info(history, with_json: bool = False) -> tuple: result = [history.method, history.path, history.query] if with_json: result.append(history.json()) return tuple(result) @pytest.mark.parametrize( "previous_date,current_date,new_event", ( (None, "2022-06-01", True), ("2022-05-31", "2022-06-01", True), ("2022-05-10", "2022-06-01", True), ("2022-06-01", "2022-06-01", False), ("2022-06-10", "2022-06-01", False), ) ) @requests_mock.Mocker(kw="requests_mocker") def test_handler(previous_date, current_date, new_event, **kwargs): requests_mocker = kwargs["requests_mocker"] apollo_config = ApolloClientConfig() requests_mocker.register_uri( "GET", f"{apollo_config._schema}://{apollo_config._host}/api/values/", json={"value": previous_date} ) requests_mocker.register_uri("PUT", f"{apollo_config._schema}://{apollo_config._host}/api/values/", json={}) dsp_config = DspClientConfig() requests_mocker.register_uri( "GET", f"{dsp_config._schema}://{dsp_config._host}/api/delphi/juno/spotify/status/daily", json={"dsp": {"spotify": {"report_date": current_date}}}, ) user_data_config = UserDataClientConfig() requests_mocker.register_uri( "POST", f"{user_data_config._schema}://{user_data_config._host}/api/service/events/", json={} ) handler(get_logger()) history = requests_mocker.request_history assert len(history) == 4 if new_event else 2 assert get_history_info(history[0]) == ("GET", "/api/values/", "key=juno_last_event_date") assert get_history_info(history[1]) == ("GET", "/api/delphi/juno/spotify/status/daily", "") if new_event: assert get_history_info(history[2], with_json=True) == ( "POST", "/api/service/events/", "", { "public": config.EVENT_IS_PUBLIC, "code": "juno_updated", "ttl": 21600, "meta": {"domain": "juno"}, "data": {"previous_date": previous_date, "current_date": current_date}, } ) assert get_history_info(history[3]) == ("PUT", "/api/values/", f"key=juno_last_event_date&value={current_date}")