from datetime import datetime from unittest.mock import patch from charts.logic.dataloaders.charts.dates import placements_dataloader from charts.logic.dataloaders.charts.dates.utils import get_chart_date_epochs from charts import handlers url = "http://127.0.0.1:5010/charts/data-for-chart-ids/" headers = { "Content-Type": "application/json" } brands = { 'orchard': 'd25a4cd1-e820-45f2-be5c-56edcfeb8298', 'sony': '9b36a627-4be9-4762-b790-5628676f5f90', 'awal': '31f4f0f0-cbb4-4a2c-9eb0-d7288c5a2588' } def test_no_extra_filter(): ids = [{"chart_date": "2025-04-01", "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {} order = {'by': 'position', 'dir': 'desc'} chart_dates_with_epochs = get_chart_date_epochs(ids) show_sme_data = None permissions = { 'artist_ids': None, 'vendor_ids': None, 'subaccount_ids': None, 'label_participant_ids': None, } js = placements_dataloader._get_chart_placements_data_for_chart_dates( chart_dates_with_epochs, filter=filter, order=order, show_sme_data=show_sme_data, permissions=permissions, ) assert len(js) == 1 data = js[0]['data']['uuidsData'] # all tracks are available assert len(data) == 200 # all brands should be empty for row in data: assert row['brand_ids'] is None # left join with brands but no filtering def test_employee_brands(): ids = [{"chart_date": "2025-04-01", "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {} order = {'by': 'position', 'dir': 'desc'} chart_dates_with_epochs = get_chart_date_epochs(ids) show_sme_data = None permissions = { 'vendor_ids': '*', 'subaccount_ids': None, 'label_participant_ids': None } js = placements_dataloader._get_chart_placements_data_for_chart_dates( chart_dates_with_epochs, filter=filter, order=order, show_sme_data=show_sme_data, permissions=permissions ) assert len(js) == 1 data = js[0]['data']['uuidsData'] # all tracks are available assert len(data) == 200 has_brand = False for row in data: brands = row['brand_ids'] if brands is not None: has_brand = True comma_count = brands.count(',') if comma_count > 0: print(comma_count) assert has_brand def test_filter_by_catalog(): ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {"is_part_of_catalog": True} order = {'by': 'position', 'dir': 'desc'} show_sme_data = False permissions = {} permissions['vendor_ids'] = '*' use_cache = False input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] assert len(data) == 14 def test_filter_by_catalogue_label_participant_ids(): ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {"is_part_of_catalog": True} order = {'by': 'position', 'dir': 'desc'} use_cache = False show_sme_data = False permissions = { 'vendor_ids': '123', 'subaccount_ids': None, 'label_participant_ids': '123' } input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] assert len(data) == 0 def test_filter_by_catalogue_subaccount_ids(): ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {"is_part_of_catalog": True} order = {'by': 'position', 'dir': 'desc'} use_cache = False show_sme_data = False permissions = { 'vendor_ids': '123', 'subaccount_ids': '123', 'label_participant_ids': None } input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] assert len(data) == 0 def test_filter_by_catalogue_vendor_ids(): ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {"is_part_of_catalog": True} order = {'by': 'position', 'dir': 'desc'} show_sme_data = False use_cache = False permissions = { 'vendor_ids': '33694', 'subaccount_ids': None, 'label_participant_ids': None } input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] assert len(data) == 0 def test_employee_no_filters(): ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {} order = {'by': 'position', 'dir': 'asc'} use_cache = False show_sme_data = False permissions = { 'vendor_ids': ['*'], 'subaccount_ids': None, 'label_participant_ids': None } input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] assert len(data) == 200 def test_employee_filter_by_catalog(): ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {"is_part_of_catalog": True} order = {'by': 'position', 'dir': 'asc'} use_cache = False show_sme_data = False permissions = { 'vendor_ids': ['*'], 'subaccount_ids': None, 'label_participant_ids': None } input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] assert len(data) == 14 def test_employee_filter_by_catalog_sme(): ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {"is_part_of_catalog": True} order = {'by': 'position', 'dir': 'asc'} use_cache = False show_sme_data = True permissions = { 'vendor_ids': ['*'], 'subaccount_ids': None, 'label_participant_ids': None } input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] assert len(data) == 51 def test_employee_filter_by_brands(): params = [ (brands['orchard'], 13), (brands['sony'], 37), (brands['awal'], 1) ] for param in params: brand = param[0] result = param[1] ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {"brand_uuid_in": [brand]} order = {'by': 'position', 'dir': 'desc'} show_sme_data = None use_cache = False permissions = { 'vendor_ids': '*', 'subaccount_ids': None, 'label_participant_ids': None } input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] # filtered assert len(data) == result def test_employee_filter_by_catalogue_and_brand(): ids = [{"chart_date": datetime.strptime("2025-04-01", "%Y-%m-%d"), "chart_id": "34f76bdb-4f5b-4917-a47e-02916f7291f5"}] filter = {"is_part_of_catalog": True, "brand_uuid_in": [brands['orchard']]} order = {'by': 'position', 'dir': 'desc'} use_cache = False show_sme_data = False permissions = {} permissions['vendor_ids'] = '*' input = { 'chart_ids_with_date': ids, 'filter': filter, 'order': order } with patch.object(handlers, 'get_request_permissions') as mock_get_request_permissions, \ patch.object(handlers, 'get_show_sme_data_flag') as mock_get_show_sme_data_flag, \ patch.object(handlers, 'get_ff_charts_cache') as mock_get_ff_charts_cache: mock_get_request_permissions.return_value = permissions mock_get_show_sme_data_flag.return_value = show_sme_data mock_get_ff_charts_cache.return_value = use_cache js = handlers._get_chart_data_for_chart_ids(input) assert len(js) == 1 data = js[0]['data']['uuidsData'] assert len(data) == 13