"""Unit tests for video traffic sources logic layer.""" import datetime from unittest.mock import patch import pytest from oto import response as oto_response from analytics.api import app from analytics.logic import top_video_traffic_sources @pytest.fixture(autouse=True) def mock_context(): """Mock context.""" with app.test_request_context(): yield {} MOCK_SNOWFLAKE_ROWS = [ { "average_view_duration_percentage": 74.043686874022, "premium_watch_time_minutes": 45287.61365, "views": 180121, "premium_views": 22232, "watch_time_minutes": 401156.0339, "average_view_duration_seconds": 131.797762466199, "source": "Playlists", }, { "average_view_duration_percentage": 58.637196701543, "premium_watch_time_minutes": 10606.8897, "views": 177171, "premium_views": 6197, "watch_time_minutes": 328247.12536, "average_view_duration_seconds": 104.374210106936, "source": "YouTube search", }, { "average_view_duration_percentage": 76.877016625891, "premium_watch_time_minutes": 8889.0533, "views": 82280, "premium_views": 4201, "watch_time_minutes": 189962.16921, "average_view_duration_seconds": 136.841089129887, "source": "Suggested videos", }, ] @pytest.fixture def mock_add_outage_error_to_stores(): """Mock add_outage_error_to_stores.""" with patch( "analytics.logic.top_video_traffic_sources.add_outage_error_to_stores" ) as add_outage_error_to_stores: add_outage_error_to_stores.return_value = [{"id": 453, "name": "YouTube"}] yield add_outage_error_to_stores @pytest.fixture def mock_get_max_available_date(): """Mock successful get_max_available_date model response.""" with patch( "analytics.utils.data_availability.get_videos_max_available_date" ) as get_max_available_date: get_max_available_date.return_value = "2018-07-06" yield get_max_available_date @pytest.fixture def mock_store_availability(): """Mock store_availability.""" with patch( "analytics.logic.top_video_traffic_sources.store_availability" ) as store_availability: store_availability.get_video_sources.return_value = [ {"id": 453, "name": "YouTube"} ] yield store_availability def test_get_top_traffic_sources_mocked_db_result( mock_context, ): with patch( "analytics.logic.top_video_traffic_sources.TopVideoTrafficSources.execute", return_value=MOCK_SNOWFLAKE_ROWS, ): result = top_video_traffic_sources.get_top_video_traffic_sources( { "video_id": "video_id", "store_ids": [], "country_ids": [], "start_date": "2021-01-01", "days": -28, }, { "permission_label_ids": [], "permission_artist_ids": [], "permission_subaccount_ids": [], "permission_label_participant_ids": [], }, ) assert result.message == { "video_id": "video_id", "sources": [{"id": 453, "name": "YouTube"}], "top_video_traffic_sources": [ { "averageViewDurationPercentage": 74.043686874022, "premiumWatchTimeMinutes": 45287.61365, "views": 180121, "premiumViews": 22232, "watchTimeMinutes": 401156.0339, "averageViewDurationSeconds": 131.797762466199, "source": "Playlists", }, { "averageViewDurationPercentage": 58.637196701543, "premiumWatchTimeMinutes": 10606.8897, "views": 177171, "premiumViews": 6197, "watchTimeMinutes": 328247.12536, "averageViewDurationSeconds": 104.374210106936, "source": "YouTube search", }, { "averageViewDurationPercentage": 76.877016625891, "premiumWatchTimeMinutes": 8889.0533, "views": 82280, "premiumViews": 4201, "watchTimeMinutes": 189962.16921, "averageViewDurationSeconds": 136.841089129887, "source": "Suggested videos", }, ], }