"""Unit tests for the top metrics logic layer.""" import datetime from unittest.mock import patch import pytest from analytics.api import app from analytics.connectors import redis from analytics.logic import top_sound_recording_families @pytest.fixture(autouse=True) def mock_context(): """Mock context.""" with app.test_request_context(): yield {} @pytest.fixture def mock_top_ids_query_execute(mock_context): with patch( "analytics.queries.top_sound_recording_families.TopSoundRecordingFamilyIds.execute" ) as mock: mock.return_value = MOCK_SNOWFLAKE_ROWS_IDS yield mock @pytest.fixture def mock_top_by_ids_query_execute(mock_context): with patch( "analytics.queries.top_sound_recording_families.TopSoundRecordingFamiliesByIds.execute" ) as mock: mock.return_value = MOCK_SNOWFLAKE_ROWS_BY_IDS yield mock MOCK_SNOWFLAKE_ROWS_IDS = [ { "prod_fam_no": "111111", "release_date": datetime.date(2016, 7, 29), "total_results": 15425521, }, { "prod_fam_no": "222222", "release_date": datetime.date(2016, 7, 29), "total_results": 15425521, }, ] MOCK_SNOWFLAKE_ROWS_BY_IDS = [ { "prod_fam_no": 6253535, "main_isrc": "USSM12309164", "related_isrcs": '[\n "USSM12309164",\n "USSM12309186"\n]', "release_date": "2024-01-12", "streams_1_day": 2480691, "growth_percentage_1_day": -0.364025738093, "streams_1_day_prev": 3485786, "streams_7_days": 25469554, "growth_percentage_7_days": -0.123969, "streams_7_days_prev": 29073795, "streams_28_days": 122523617, "growth_percentage_28_days": -0.134702, "streams_28_days_prev": 141597076, "streams_183_days": 356883674, "growth_percentage_183_days": 0.000000, "streams_183_days_prev": 0, "streams_365_days": 356883674, "growth_percentage_365_days": 0.000000, "streams_365_days_prev": 0, "streams_all_time": 356883674, "top_5_tiktok_scores": None, "top_5_tiktok_score_countries": None, "views_1_day": 0, "views_growth_percentage_1_day": -1.000000, "views_1_day_prev": 103518098, "views_7_days": 589874622, "views_growth_percentage_7_days": -0.332807, "views_7_days_prev": 884113543, "views_28_days": 3851220162, "views_growth_percentage_28_days": 0.785411, "views_28_days_prev": 2157049283, "views_all_time": 6536110656, "creations_1_day": 0, "creations_growth_percentage_1_day": -1.000000, "creations_1_day_prev": 17634, "creations_7_days": 117611, "creations_growth_percentage_7_days": -0.365198, "creations_7_days_prev": 185272, "creations_28_days": 851388, "creations_growth_percentage_28_days": 0.705881, "creations_28_days_prev": 499090, "creations_all_time": 1461070, "max_tiktok_score": None, "total_results": 1, } ] def test_get_top_sound_recording_families_ids( mock_context, mock_top_ids_query_execute, ): redis.client.flushall() # flush Fakeredis cache result = top_sound_recording_families.get_top_sound_recording_families_ids( { "label_id": "34536", "order_by": "streams_7_days", "order_dir": "DESC", }, {}, ) assert result.message == { "items": [{"prod_fam_id": 111111}, {"prod_fam_id": 222222}], "total_results": 15425521, } def test_get_top_sound_recording_families_by_ids( mock_context, mock_top_by_ids_query_execute, ): redis.client.flushall() # flush Fakeredis cache result = top_sound_recording_families.get_top_sound_recording_families_by_ids( { "prod_fam_ids": ["6253535"], "order_by": "streams_7_days", "order_dir": "DESC", }, {}, ) assert result.message == { "items": [ { "creations_1_day": 0, "creations_1_day_prev": 17634, "creations_28_days": 851388, "creations_28_days_prev": 499090, "creations_7_days": 117611, "creations_7_days_prev": 185272, "creations_all_time": 1461070, "creations_growth_percentage_1_day": -1.0, "creations_growth_percentage_28_days": 0.705881, "creations_growth_percentage_7_days": -0.365198, "growth_percentage_183_days": 0.0, "growth_percentage_1_day": -0.364025738093, "growth_percentage_28_days": -0.134702, "growth_percentage_365_days": 0.0, "growth_percentage_7_days": -0.123969, "main_isrc": "USSM12309164", "product_family_id": 6253535, "related_isrcs": ["USSM12309164", "USSM12309186"], "streams_183_days": 356883674, "streams_183_days_prev": 0, "streams_1_day": 2480691, "streams_1_day_prev": 3485786, "streams_28_days": 122523617, "streams_28_days_prev": 141597076, "streams_365_days": 356883674, "streams_365_days_prev": 0, "streams_7_days": 25469554, "streams_7_days_prev": 29073795, "streams_all_time": 356883674, "top5_tiktok_scores_by_country": None, "views_1_day": 0, "views_1_day_prev": 103518098, "views_28_days": 3851220162, "views_28_days_prev": 2157049283, "views_7_days": 589874622, "views_7_days_prev": 884113543, "views_all_time": 6536110656, "views_growth_percentage_1_day": -1.0, "views_growth_percentage_28_days": 0.785411, "views_growth_percentage_7_days": -0.332807, } ], "total_results": 1, }