from datetime import date from unittest.mock import patch import pytest from playlist.queries.fetch_queries import fetch_placement_streams_time_series from tests.unit.utils import raises_validation_error @pytest.mark.disable_mock_execute def test_minimal(mock_execute_orm, mock_template_engine): query_params = { "isrc": "QM6N22019571", "store_id": "1", "store_playlist_id": "28e198160de525afc82bf48a159a56edc4e58d1a", } permissions = { "permission_label_ids": ["1", "2", "3"], } fetch_placement_streams_time_series(query_params, permissions) db_call_args = mock_template_engine.prepare_query.call_args[0][1] assert db_call_args["isrc"] == "QM6N22019571" assert ( db_call_args["store_playlist_id"] == "28e198160de525afc82bf48a159a56edc4e58d1a" ) assert db_call_args["store_id"] == "1" assert "start_date" not in db_call_args assert "end_date" not in db_call_args @pytest.mark.disable_mock_execute def test_global(mock_execute_orm): query_params = { "isrc": "QM6N22019571", "store_id": "1", "store_playlist_id": "28e198160de525afc82bf48a159a56edc4e58d1a", } permissions = { "permission_label_ids": ["1", "2", "3"], } fetch_placement_streams_time_series(query_params, permissions) assert "AND streams_country in" not in mock_execute_orm.call_args[0][0] @pytest.mark.disable_mock_execute def test_date_filters(mock_execute_orm, mock_template_engine): query_params = { "isrc": "QM6N22019571", "store_id": "1", "store_playlist_id": "28e198160de525afc82bf48a159a56edc4e58d1a", "start_date": "2020-01-23", "end_date": "2020-09-23", "stream_countries": ["GB"], } permissions = { "permission_label_ids": ["1", "2", "3"], } fetch_placement_streams_time_series(query_params, permissions) db_call_args = mock_template_engine.prepare_query.call_args[0][1] assert db_call_args["isrc"] == "QM6N22019571" assert ( db_call_args["store_playlist_id"] == "28e198160de525afc82bf48a159a56edc4e58d1a" ) assert db_call_args["store_id"] == "1" assert db_call_args["start_date"] == date(2020, 1, 23) assert db_call_args["end_date"] == date(2020, 9, 23) assert db_call_args["stream_countries"] == ["GB"] @pytest.mark.disable_mock_execute def test_countries(mock_execute_orm, mock_template_engine): query_params = { "isrc": "QM6N22019571", "store_id": "1", "store_playlist_id": "28e198160de525afc82bf48a159a56edc4e58d1a", "start_date": "2020-01-23", "end_date": "2020-09-23", "stream_countries": ["GB", "DE"], } permissions = { "permission_label_ids": ["1", "2", "3"], } fetch_placement_streams_time_series(query_params, permissions) db_call_args = mock_template_engine.prepare_query.call_args[0][1] assert db_call_args["stream_countries"] == ["GB", "DE"] def test_invalid_dates(mock_execute): permissions = { "permission_label_ids": ["1", "2", "3"], } with raises_validation_error({"start_date": ["Not a valid date."]}): fetch_placement_streams_time_series( { "isrc": "QM6N22019571", "store_id": "1", "store_playlist_id": "28e198160de525afc82bf48a159a56edc4e58d1a", "start_date": "2020-01-_23", "end_date": "2020-09-23", }, permissions, ) with raises_validation_error({"end_date": ["Not a valid date."]}): fetch_placement_streams_time_series( { "isrc": "QM6N22019571", "store_id": "1", "store_playlist_id": "28e198160de525afc82bf48a159a56edc4e58d1a", "start_date": "2020-01-23", "end_date": "2020-09-233", }, permissions, ) assert mock_execute.call_count == 0 def test_invalid_countries(mock_execute): permissions = { "permission_label_ids": ["1", "2", "3"], } with raises_validation_error({"stream_countries": {1: ["Not a valid string."]}}): fetch_placement_streams_time_series( { "isrc": "QM6N22019571", "store_id": "1", "store_playlist_id": "28e198160de525afc82bf48a159a56edc4e58d1a", "start_date": "2020-01-23", "end_date": "2020-09-23", "stream_countries": ["GB", 234], }, permissions, )