"""Test for Analytics logic tier.""" from unittest.mock import patch from oto import status import pytest from podcast.constants import analytics as analytics_constants from podcast.logic import analytics from podcast.utils.exc import OwsError @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_network(mock_country_daily_downloads, mock_get_feature_flag, mock_current_admin_user): """Country daily downloads successful request.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result result = analytics.country_daily_downloads( 2, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], []) assert result == mock_result mock_country_daily_downloads.assert_called_once_with( 2, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], [], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_network_no_access( mock_country_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user): """Country daily downloads request fails if user does not have access.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.country_daily_downloads( 2, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], []) assert err.value.status == status.FORBIDDEN mock_country_daily_downloads.assert_not_called() @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_podcast(mock_country_daily_downloads, mock_get_feature_flag, mock_current_admin_user): """Country daily downloads successful request.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result result = analytics.country_daily_downloads( 1, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], []) assert result == mock_result mock_country_daily_downloads.assert_called_once_with( 1, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], [], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_podcast_no_access( mock_country_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Country daily downloads request fails if user does not have access.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.country_daily_downloads( 2, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], []) assert err.value.status == status.FORBIDDEN mock_country_daily_downloads.assert_not_called() @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_episode(mock_country_daily_downloads, mock_get_feature_flag, mock_current_admin_user): """Country daily downloads successful request.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result result = analytics.country_daily_downloads( 1, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], []) assert result == mock_result mock_country_daily_downloads.assert_called_once_with( 1, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], [], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_episode_no_access( mock_country_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Country daily downloads request fails if user does not have access.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.country_daily_downloads( 3, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], []) assert err.value.status == status.FORBIDDEN mock_country_daily_downloads.assert_not_called() @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_network( mock_player_daily_downloads, mock_get_feature_flag, mock_current_admin_user, player_daily_downloads_fixture): """Test player daily downloads success.""" mock_player_daily_downloads.return_value = player_daily_downloads_fixture result = analytics.player_daily_downloads( 1, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert result == player_daily_downloads_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_network_fails( mock_player_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test player daily downloads failure.""" with pytest.raises(OwsError) as err: analytics.player_daily_downloads( 2, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_podcast( mock_player_daily_downloads, mock_get_feature_flag, mock_current_admin_user, player_daily_downloads_fixture): """Test player daily downloads success.""" mock_player_daily_downloads.return_value = player_daily_downloads_fixture result = analytics.player_daily_downloads( 1, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert result == player_daily_downloads_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_podcast_fails( mock_player_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test player daily downloads failure.""" with pytest.raises(OwsError) as err: analytics.player_daily_downloads( 2, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_episode( mock_player_daily_downloads, mock_get_feature_flag, mock_current_admin_user, player_daily_downloads_fixture): """Test player daily downloads success.""" mock_player_daily_downloads.return_value = player_daily_downloads_fixture result = analytics.player_daily_downloads( 1, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert result == player_daily_downloads_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_episode_fails( mock_player_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test player daily downloads failure.""" with pytest.raises(OwsError) as err: analytics.player_daily_downloads( 3, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.top_episodes') def test_top_episodes( mock_top_episodes, mock_get_feature_flag, mock_current_network_admin_user, top_episodes_fixture): """Top episodes successful request.""" mock_top_episodes.return_value = top_episodes_fixture network_id = 1 result = analytics.top_episodes( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, None, 'downloads', 'DESC') assert result == top_episodes_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) def test_top_episodes_no_podcast_exists(mock_get_feature_flag, mock_current_network_admin_user_second): """Top episodes when no podcast exists for the network and the network admin user.""" network_id = 3 result = analytics.top_episodes( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, None, 'downloads', 'DESC') assert result == { 'items': [], 'pagination': { 'total_records': 0 } } @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.top_episodes') def test_top_episodes_with_podcast_id_filter( mock_top_episodes, mock_get_feature_flag, mock_current_podcast_level_user, top_episodes_fixture): """Top episodes with podcast id filter successful request.""" mock_top_episodes.return_value = top_episodes_fixture network_id = 1 podcast_id = 1 result = analytics.top_episodes( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, podcast_id, 'downloads', 'DESC') assert result == top_episodes_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.top_episodes') def test_top_episodes_with_podcast_id_filter_failure( mock_top_episodes, mock_get_feature_flag, mock_current_podcast_level_user, top_episodes_fixture): """Top episodes with podcast id filter request failure.""" mock_top_episodes.return_value = top_episodes_fixture network_id = 2 podcast_id = 2 with pytest.raises(OwsError) as err: analytics.top_episodes( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, podcast_id, 'downloads', 'DESC' ) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.top_podcasts') def test_top_podcasts( mock_top_podcasts, mock_get_feature_flag, mock_current_network_admin_user, top_podcasts_fixture): """Top podcasts successful request.""" mock_top_podcasts.return_value = top_podcasts_fixture network_id = 1 result = analytics.top_podcasts( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, 'downloads', 'DESC') assert result == top_podcasts_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) def test_top_podcasts_no_podcast_exists(mock_get_feature_flag, mock_current_network_admin_user_second): """Top podcasts when no podcast exists for the network and the network admin user.""" network_id = 3 result = analytics.top_podcasts( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, 'downloads', 'DESC') assert result == { 'items': [], 'pagination': { 'total_records': 0 } } @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.episode_daily_downloads') def test_episode_daily_downloads( mock_episode_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user): """Test episode daily downloads successful request.""" mock_result = [] mock_episode_daily_downloads.return_value = mock_result result = analytics.episode_daily_downloads( [1, 2], analytics_constants.PAST_28_DAYS, ['US'], ['Apple']) assert result == mock_result mock_episode_daily_downloads.assert_called_once_with( [1, 2], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.episode_daily_downloads') def test_episode_daily_downloads_fails( mock_episode_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test episode daily downloads request fails.""" mock_result = [] mock_episode_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.episode_daily_downloads( [3], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.podcast_daily_downloads') def test_podcast_daily_downloads( mock_podcast_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test podcast daily downloads successful request.""" mock_result = [] mock_podcast_daily_downloads.return_value = mock_result result = analytics.podcast_daily_downloads( [1], analytics_constants.PAST_28_DAYS, ['US'], ['Apple']) assert result == mock_result mock_podcast_daily_downloads.assert_called_once_with( [1], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.podcast_daily_downloads') def test_podcast_daily_downloads_fails( mock_podcast_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user_second): """Test podcast daily downloads request fails.""" mock_result = [] mock_podcast_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.podcast_daily_downloads( [1, 2], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.network_daily_downloads') def test_network_daily_downloads( mock_network_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user_second): """Test network daily downloads successful request.""" mock_result = [] mock_network_daily_downloads.return_value = mock_result result = analytics.network_daily_downloads( [3], analytics_constants.PAST_28_DAYS, ['US'], ['Apple']) assert result == mock_result mock_network_daily_downloads.assert_called_once_with( [3], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.network_daily_downloads') def test_network_daily_downloads_fails( mock_network_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user): """Test network daily downloads request fails.""" mock_result = [] mock_network_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.network_daily_downloads( [3], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.get_chartable_podcasts_by_ids') def test_get_chartable_podcasts_by_ids( mock_get_chartable_podcasts_by_ids, mock_get_feature_flag, mock_current_podcast_level_user): """Test get chartable podcasts by ids successful request.""" mock_result = [] mock_get_chartable_podcasts_by_ids.return_value = mock_result result = analytics.get_chartable_podcasts_by_ids([1]) assert result == mock_result mock_get_chartable_podcasts_by_ids.assert_called_once_with([1]) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.get_chartable_podcasts_by_ids') def test_get_chartable_podcasts_by_ids_fails( mock_get_chartable_podcasts_by_ids, mock_get_feature_flag, mock_current_network_admin_user_second): """Test get chartable podcasts by ids request fails.""" mock_result = [] mock_get_chartable_podcasts_by_ids.return_value = mock_result with pytest.raises(OwsError) as err: analytics.get_chartable_podcasts_by_ids([6]) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.get_podcast_chart') def test_get_chartable_podcast_chart( mock_get_podcast_chart, mock_get_feature_flag, mock_current_network_admin_user): """Test get chartable podcast chart successful request.""" mock_result = [] mock_get_podcast_chart.return_value = mock_result result = analytics.get_chartable_podcast_chart('Apple', 'art', 'US', '2023-11-10') assert result == mock_result mock_get_podcast_chart.assert_called_once_with('Apple', 'art', 'US', '2023-11-10', [1, 2]) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=False) @patch('podcast.models.ows_analytics.get_episode_chart') def test_get_chartable_episode_chart( mock_get_episode_chart, mock_get_feature_flag, mock_current_podcast_level_user): """Test get episode chart successful request.""" mock_result = [] mock_get_episode_chart.return_value = mock_result result = analytics.get_chartable_episode_chart('art', 'US', '2023-11-10') assert result == mock_result mock_get_episode_chart.assert_called_once_with('art', 'US', '2023-11-10', [1]) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_network_v2( mock_country_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user): """Country daily downloads successful request.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result result = analytics.country_daily_downloads( 1, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], []) assert result == mock_result mock_country_daily_downloads.assert_called_once_with( 1, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], [], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_network_no_access_v2( mock_country_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user_second): """Country daily downloads request fails if user does not have access.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.country_daily_downloads( 2, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], []) assert err.value.status == status.FORBIDDEN mock_country_daily_downloads.assert_not_called() @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_podcast_v2( mock_country_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Country daily downloads successful request.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result result = analytics.country_daily_downloads( 1, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], []) assert result == mock_result mock_country_daily_downloads.assert_called_once_with( 1, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], [], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_podcast_no_access_v2( mock_country_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user): """Country daily downloads request fails if user does not have access.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.country_daily_downloads( 2, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], []) assert err.value.status == status.FORBIDDEN mock_country_daily_downloads.assert_not_called() @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_episode_v2( mock_country_daily_downloads, mock_get_feature_flag, mock_current_admin_user): """Country daily downloads successful request.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result result = analytics.country_daily_downloads( 1, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], []) assert result == mock_result mock_country_daily_downloads.assert_called_once_with( 1, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], [], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.country_daily_downloads') def test_country_daily_downloads_episode_no_access_v2( mock_country_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Country daily downloads request fails if user does not have access.""" mock_result = [{'country': 'US', 'report_date': '2021-02-02', 'downloads': 200}] mock_country_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.country_daily_downloads( 3, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], []) assert err.value.status == status.FORBIDDEN mock_country_daily_downloads.assert_not_called() @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_network_v2( mock_player_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user, player_daily_downloads_fixture): """Test player daily downloads success.""" mock_player_daily_downloads.return_value = player_daily_downloads_fixture result = analytics.player_daily_downloads( 1, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert result == player_daily_downloads_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_network_fails_v2( mock_player_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test player daily downloads failure.""" with pytest.raises(OwsError) as err: analytics.player_daily_downloads( 2, analytics_constants.NETWORK, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_podcast_v2( mock_player_daily_downloads, mock_get_feature_flag, mock_current_admin_user, player_daily_downloads_fixture): """Test player daily downloads success.""" mock_player_daily_downloads.return_value = player_daily_downloads_fixture result = analytics.player_daily_downloads( 1, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert result == player_daily_downloads_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_podcast_fails_v2( mock_player_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test player daily downloads failure.""" with pytest.raises(OwsError) as err: analytics.player_daily_downloads( 2, analytics_constants.PODCAST, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_episode_v2( mock_player_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user, player_daily_downloads_fixture): """Test player daily downloads success.""" mock_player_daily_downloads.return_value = player_daily_downloads_fixture result = analytics.player_daily_downloads( 1, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert result == player_daily_downloads_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.player_daily_downloads') def test_player_daily_downloads_episode_fails_v2( mock_player_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test player daily downloads failure.""" with pytest.raises(OwsError) as err: analytics.player_daily_downloads( 3, analytics_constants.EPISODE, analytics_constants.PAST_28_DAYS, ['US'], ['Player1', 'Player2'] ) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.top_episodes') def test_top_episodes_v2( mock_top_episodes, mock_get_feature_flag, mock_current_network_admin_user, top_episodes_fixture): """Top episodes successful request.""" mock_top_episodes.return_value = top_episodes_fixture network_id = 1 result = analytics.top_episodes( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, None, 'downloads', 'DESC') assert result == top_episodes_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) def test_top_episodes_no_podcast_exists_v2(mock_get_feature_flag, mock_current_network_admin_user_second): """Top episodes when no podcast exists for the network and the network admin user.""" network_id = 3 result = analytics.top_episodes( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, None, 'downloads', 'DESC') assert result == { 'items': [], 'pagination': { 'total_records': 0 } } @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.top_episodes') def test_top_episodes_with_podcast_id_filter_v2( mock_top_episodes, mock_get_feature_flag, mock_current_podcast_level_user, top_episodes_fixture): """Top episodes with podcast id filter successful request.""" mock_top_episodes.return_value = top_episodes_fixture network_id = 1 podcast_id = 1 result = analytics.top_episodes( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, podcast_id, 'downloads', 'DESC') assert result == top_episodes_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.top_episodes') def test_top_episodes_with_podcast_id_filter_failure_v2( mock_top_episodes, mock_get_feature_flag, mock_current_podcast_level_user, top_episodes_fixture): """Top episodes with podcast id filter request failure.""" mock_top_episodes.return_value = top_episodes_fixture network_id = 2 podcast_id = 2 with pytest.raises(OwsError) as err: analytics.top_episodes( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, podcast_id, 'downloads', 'DESC' ) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.top_podcasts') def test_top_podcasts_v2( mock_top_podcasts, mock_get_feature_flag, mock_current_network_admin_user, top_podcasts_fixture): """Top podcasts successful request.""" mock_top_podcasts.return_value = top_podcasts_fixture network_id = 1 result = analytics.top_podcasts( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, 'downloads', 'DESC') assert result == top_podcasts_fixture @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) def test_top_podcasts_no_podcast_exists_v2(mock_get_feature_flag, mock_current_network_admin_user_second): """Top podcasts when no podcast exists for the network and the network admin user.""" network_id = 3 result = analytics.top_podcasts( analytics_constants.PAST_28_DAYS, ['US'], [], 10, 0, network_id, 'downloads', 'DESC') assert result == { 'items': [], 'pagination': { 'total_records': 0 } } @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.episode_daily_downloads') def test_episode_daily_downloads_v2( mock_episode_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user): """Test episode daily downloads successful request.""" mock_result = [] mock_episode_daily_downloads.return_value = mock_result result = analytics.episode_daily_downloads( [1, 2], analytics_constants.PAST_28_DAYS, ['US'], ['Apple']) assert result == mock_result mock_episode_daily_downloads.assert_called_once_with( [1, 2], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.episode_daily_downloads') def test_episode_daily_downloads_fails_v2( mock_episode_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test episode daily downloads request fails.""" mock_result = [] mock_episode_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.episode_daily_downloads( [3], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.podcast_daily_downloads') def test_podcast_daily_downloads_v2( mock_podcast_daily_downloads, mock_get_feature_flag, mock_current_podcast_level_user): """Test podcast daily downloads successful request.""" mock_result = [] mock_podcast_daily_downloads.return_value = mock_result result = analytics.podcast_daily_downloads( [1], analytics_constants.PAST_28_DAYS, ['US'], ['Apple']) assert result == mock_result mock_podcast_daily_downloads.assert_called_once_with( [1], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.podcast_daily_downloads') def test_podcast_daily_downloads_fails_v2( mock_podcast_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user_second): """Test podcast daily downloads request fails.""" mock_result = [] mock_podcast_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.podcast_daily_downloads( [1, 2], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.network_daily_downloads') def test_network_daily_downloads_v2( mock_network_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user_second): """Test network daily downloads successful request.""" mock_result = [] mock_network_daily_downloads.return_value = mock_result result = analytics.network_daily_downloads( [3], analytics_constants.PAST_28_DAYS, ['US'], ['Apple']) assert result == mock_result mock_network_daily_downloads.assert_called_once_with( [3], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.network_daily_downloads') def test_network_daily_downloads_fails_v2( mock_network_daily_downloads, mock_get_feature_flag, mock_current_network_admin_user): """Test network daily downloads request fails.""" mock_result = [] mock_network_daily_downloads.return_value = mock_result with pytest.raises(OwsError) as err: analytics.network_daily_downloads( [3], analytics_constants.PAST_28_DAYS, ['US'], ['Apple'], None, None) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.get_chartable_podcasts_by_ids') def test_get_chartable_podcasts_by_ids_v2( mock_get_chartable_podcasts_by_ids, mock_get_feature_flag, mock_current_podcast_level_user): """Test get chartable podcasts by ids successful request.""" mock_result = [] mock_get_chartable_podcasts_by_ids.return_value = mock_result result = analytics.get_chartable_podcasts_by_ids([1]) assert result == mock_result mock_get_chartable_podcasts_by_ids.assert_called_once_with([1]) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.get_chartable_podcasts_by_ids') def test_get_chartable_podcasts_by_ids_fails_v2( mock_get_chartable_podcasts_by_ids, mock_get_feature_flag, mock_current_network_admin_user_second): """Test get chartable podcasts by ids request fails.""" mock_result = [] mock_get_chartable_podcasts_by_ids.return_value = mock_result with pytest.raises(OwsError) as err: analytics.get_chartable_podcasts_by_ids([6]) assert err.value.status == status.FORBIDDEN @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.get_podcast_chart') def test_get_chartable_podcast_chart_v2( mock_get_podcast_chart, mock_get_feature_flag, mock_current_network_admin_user): """Test get chartable podcast chart successful request.""" mock_result = [] mock_get_podcast_chart.return_value = mock_result result = analytics.get_chartable_podcast_chart('Apple', 'art', 'US', '2023-11-10') assert result == mock_result mock_get_podcast_chart.assert_called_once_with('Apple', 'art', 'US', '2023-11-10', [1, 3]) @patch('podcast.utils.feature_flag_utils.get_feature_flag', return_value=True) @patch('podcast.models.ows_analytics.get_episode_chart') def test_get_chartable_episode_chart_v2( mock_get_episode_chart, mock_get_feature_flag, mock_current_podcast_level_user): """Test get episode chart successful request.""" mock_result = [] mock_get_episode_chart.return_value = mock_result result = analytics.get_chartable_episode_chart('art', 'US', '2023-11-10') assert result == mock_result mock_get_episode_chart.assert_called_once_with('art', 'US', '2023-11-10', [1, 3])