"""Unit tests for the top metrics logic layer.""" import datetime from decimal import Decimal from unittest.mock import patch import pytest from analytics.api import app from analytics.connectors import redis from analytics.logic import top_metrics @pytest.fixture(autouse=True) def mock_context(): """Mock context.""" with app.test_request_context(): yield {} @pytest.fixture(autouse=True) def mock_is_apple_spotify_data_in_sync(): """Mock successful is_apple_spotify_data_in_sync util response.""" with patch( "analytics.utils.store_availability.is_apple_spotify_data_in_sync" ) as is_apple_spotify_data_in_sync: is_apple_spotify_data_in_sync.return_value = True yield is_apple_spotify_data_in_sync def test_get_top_metrics_empty_db_result( mock_context, ): redis.client.flushall() # flush Fakeredis cache with patch( "analytics.logic.top_metrics.TopMetricsSoundRecordings.execute", return_value=[], ): result = top_metrics.get_top_metrics( {}, { "permission_label_ids": [], "permission_subaccount_ids": [], "permission_artist_ids": [], "permission_label_participant_ids": [], }, ) assert result.message == {"items": [], "total_results": 0} MOCK_SNOWFLAKE_ROWS = [ { "isrc": "USQX91601347", "release_date": datetime.date(2016, 7, 29), "streams_1_day": 1053126, "growth_percentage_1_day": Decimal("0.010148000000"), "streams_1_day_prev": 1042546, "streams_7_days": 8093078, "growth_percentage_7_days": Decimal("-0.051186"), "streams_7_days_prev": 8529679, "streams_28_days": 33114873, "growth_percentage_28_days": Decimal("0.044186"), "streams_28_days_prev": 31713564, "streams_183_days": 211494255, "growth_percentage_183_days": Decimal("-0.039542"), "streams_183_days_prev": 220201407, "streams_365_days": 431695662, "growth_percentage_365_days": Decimal("0.045737"), "streams_365_days_prev": 412814711, "streams_all_time": 4525853826, "top_5_tiktok_scores": None, "top_5_tiktok_score_countries": None, "views_1_day": None, "views_growth_percentage_1_day": Decimal("0.000000"), "views_1_day_prev": None, "views_7_days": None, "views_growth_percentage_7_days": Decimal("0.000000"), "views_7_days_prev": None, "views_28_days": None, "views_growth_percentage_28_days": Decimal("0.000000"), "views_28_days_prev": None, "views_all_time": None, "creations_1_day": None, "creations_growth_percentage_1_day": Decimal("0.000000"), "creations_1_day_prev": None, "creations_7_days": None, "creations_growth_percentage_7_days": Decimal("0.000000"), "creations_7_days_prev": None, "creations_28_days": None, "creations_growth_percentage_28_days": Decimal("0.000000"), "creations_28_days_prev": None, "creations_all_time": None, "max_tiktok_score": None, "total_results": 15425521, } ] def test_get_top_metrics_mocked_db_result( mock_context, ): redis.client.flushall() # flush Fakeredis cache with patch( "analytics.logic.top_metrics.TopMetricsSoundRecordings.execute", return_value=MOCK_SNOWFLAKE_ROWS, ): result = top_metrics.get_top_metrics( {}, { "permission_label_ids": [], "permission_subaccount_ids": [], "permission_artist_ids": [], "permission_label_participant_ids": [], }, ) assert result.message == { "items": [ { "creations_1_day": None, "creations_1_day_prev": None, "creations_28_days": None, "creations_28_days_prev": None, "creations_7_days": None, "creations_7_days_prev": None, "creations_all_time": None, "creations_growth_percentage_1_day": 0.0, "creations_growth_percentage_28_days": 0.0, "creations_growth_percentage_7_days": 0.0, "growth_percentage_183_days": -0.039542, "growth_percentage_1_day": 0.010148, "growth_percentage_28_days": 0.044186, "growth_percentage_365_days": 0.045737, "growth_percentage_7_days": -0.051186, "isrc": "USQX91601347", "streams_183_days": 211494255, "streams_183_days_prev": 220201407, "streams_1_day": 1053126, "streams_1_day_prev": 1042546, "streams_28_days": 33114873, "streams_28_days_prev": 31713564, "streams_365_days": 431695662, "streams_365_days_prev": 412814711, "streams_7_days": 8093078, "streams_7_days_prev": 8529679, "streams_all_time": 4525853826, "views_1_day": None, "views_1_day_prev": None, "views_28_days": None, "views_28_days_prev": None, "views_7_days": None, "views_7_days_prev": None, "views_all_time": None, "views_growth_percentage_1_day": 0.0, "views_growth_percentage_28_days": 0.0, "views_growth_percentage_7_days": 0.0, } ], "total_results": 15425521, }