import pytest from datetime import datetime, timedelta from flask import url_for from http import HTTPStatus from tests.legacy.charts.factories import ChartsMonitoringFactory pytest_plugins = ["tests.legacy.vendor_api.fixtures.vendor_responses"] @pytest.mark.parametrize( "dsp,chart_id,length,status", ( (["spotify"], None, 1, HTTPStatus.OK), (["apple"], None, 1, HTTPStatus.OK), (["apple", "spotify"], None, 2, HTTPStatus.OK), ), ) def test_get_chart_monitoring(db_session, client, dsp, chart_id, user_id, patch_auth_user, length, status): patch_auth_user(user_id) params = {"dsp": dsp} if chart_id: params["chart_id"] = chart_id ChartsMonitoringFactory.create( dsp="spotify", chart_type="regional", breakdown="daily", market="us", chart_id="regional_daily_us", updated_at=(datetime.utcnow() - timedelta(days=1)), chart_datetime=(datetime.utcnow() - timedelta(days=2)), data=None, ) ChartsMonitoringFactory.create( dsp="apple", chart_type="regional", breakdown="daily", market="us", chart_id="regional_daily_us", updated_at=(datetime.utcnow() - timedelta(days=1)), chart_datetime=(datetime.utcnow() - timedelta(days=2)), data='{"key": "value"}', ) url = url_for("charts_blueprint.chart_monitoring_view", **params) response = client.get(url) response_status_code = response.status_code assert response_status_code == status if response_status_code == status: assert len(response.json) == length @pytest.mark.parametrize( "dsp,chart_id,exists,put_status_code,data", ( ("spotify", "regional_daily_us", False, HTTPStatus.CREATED, None), ("apple", "charts_daily_us", False, HTTPStatus.CREATED, '{"new_key: "new_value"}'), ("spotify", "regional_daily_uk", True, HTTPStatus.OK, None), ("apple", "charts_daily_uk", True, HTTPStatus.OK, '{"new_key: "new_value"}'), ), ) def test_put_chart_monitoring( db_session, client, dsp, chart_id, user_id, patch_auth_user, exists, put_status_code, data ): patch_auth_user(user_id) previous_updated_at = datetime.strftime(datetime.utcnow() - timedelta(days=1), format="%Y-%m-%dT%H:%M:%S") previous_chart_datetime = datetime.strftime(datetime.utcnow() - timedelta(days=2), format="%Y-%m-%dT00:00:00") updated_at = datetime.strftime(datetime.utcnow(), format="%Y-%m-%dT%H:%M:%S") chart_datetime = datetime.strftime(datetime.utcnow() - timedelta(days=1), format="%Y-%m-%dT00:00:00") body = {"dsp": dsp, "chart_id": chart_id, "updated_at": updated_at, "chart_datetime": chart_datetime} if data: body["data"] = data params = {"dsp": dsp, "chart_id": chart_id} ChartsMonitoringFactory.create( dsp="spotify", chart_type="regional", breakdown="daily", market="uk", chart_id="regional_daily_uk", updated_at=previous_updated_at, chart_datetime=previous_chart_datetime, data=None, ) ChartsMonitoringFactory.create( dsp="apple", chart_type="charts", breakdown="daily", market="uk", chart_id="charts_daily_uk", updated_at=previous_updated_at, chart_datetime=previous_chart_datetime, data='{"key": "value"}', ) if exists: url_get = url_for("charts_blueprint.chart_monitoring_view", **params) response = client.get(url_get) assert response.status_code == HTTPStatus.OK response_json = response.json[0] assert response_json["updated_at"] == previous_updated_at assert response_json["chart_datetime"] == previous_chart_datetime assert response_json["data"] is None if dsp == "spotify" else response_json["data"] == '{"key": "value"}' url_put = url_for("charts_blueprint.chart_monitoring_view") response = client.put(url_put, json=body, content_type="application/json") assert response.status_code == put_status_code url_get = url_for("charts_blueprint.chart_monitoring_view", **params) response = client.get(url_get) json_response = response.json[0] assert response.status_code == HTTPStatus.OK assert json_response["updated_at"] == updated_at assert json_response["chart_datetime"] == chart_datetime assert json_response["data"] == data