from typing import Final import pytest import datetime from unittest.mock import patch from uuid import UUID from charts.connectors import snowflake from charts.logic.dataloaders.charts.dates import placements_dataloader from charts.logic.dataloaders.charts.dates.utils import ChartDateWithEpochType from charts.logic import permissions from charts.logic import sql_loader def test_get_chart_placements_for_chart_dates( mock_none_permissions: permissions.NonePermissionsType, ) -> None: """Test _get_chart_placements_for_chart_dates.""" fetchall_mock_response = [ [ 'f4427653-e046-4cd1-813a-bf61806ccf77', datetime.date(2021, 9, 16), "08852acf-8ec7-484a-9a9d-f151dbd14dfb,5c818c33-1aff-49b7-a7df-f24c5c6a6609" ], ] filter: placements_dataloader.FilterType = { 'is_part_of_catalog': False } order: placements_dataloader.OrderType = { 'by': 'position', 'dir': 'ASC', 'and_then': None } with patch.object(sql_loader, 'load_query') as mock_sql_loader,\ patch.object(placements_dataloader, '_chart_placements_filter') as mock_placements_filter,\ patch.object(snowflake, 'fetchall_nocache') as mock_fetchall: mock_sql_loader.return_value = 'SQL {{ filter }} ORDER: {{ order }}' mock_placements_filter.return_value = '', '', 'Filter SQL', {'filter_param': 'f'} mock_fetchall.return_value = fetchall_mock_response response = placements_dataloader._get_chart_placements_for_chart_dates( [{ "chart_id": UUID('f4427653-e046-4cd1-813a-bf61806ccf77'), "chart_date": datetime.date.fromisoformat("2020-01-01"), "epoch": 0, }], filter=filter, order=order, show_sme_data=True, permissions=mock_none_permissions, ) assert response == [ { "data": { 'chartId': 'f4427653-e046-4cd1-813a-bf61806ccf77', 'chartDate': datetime.date(2021, 9, 16), 'uuids': ['08852acf-8ec7-484a-9a9d-f151dbd14dfb', '5c818c33-1aff-49b7-a7df-f24c5c6a6609'] } }, ] mock_placements_filter.assert_called_once_with( filter, show_sme_data=True, permissions=mock_none_permissions, ) mock_fetchall.assert_called_once_with( 'SQL Filter SQL ORDER: position ASC', { 'chart_ids_with_dates': [["(0, 'f4427653-e046-4cd1-813a-bf61806ccf77', '2020-01-01')"]], 'filter_param': 'f', } ) def test_get_chart_placements_for_chart_dates_with_order_by_major_moves( mock_none_permissions: permissions.NonePermissionsType, ) -> None: """ Test _get_chart_placements_for_chart_dates called with major_moves as order by parameter and and_then: {'by': 'POSITION', 'dir': 'ASC'} as second sorting parameter. """ fetchall_mock_response = [ [ 'f4427653-e046-4cd1-813a-bf61806ccf77', datetime.date(2021, 9, 16), "08852acf-8ec7-484a-9a9d-f151dbd14dfb,5c818c33-1aff-49b7-a7df-f24c5c6a6609" ], ] filter: placements_dataloader.FilterType = { 'is_part_of_catalog': False } order: placements_dataloader.OrderType = { 'by': 'major_moves', 'dir': 'DESC', 'and_then': {'by': 'POSITION', 'dir': 'ASC'} } with patch.object(sql_loader, 'load_query') as mock_sql_loader,\ patch.object(placements_dataloader, '_chart_placements_filter') as mock_placements_filter,\ patch.object(snowflake, 'fetchall_nocache') as mock_fetchall: mock_sql_loader.return_value = 'SQL {{ filter }} ORDER: {{ order }}' mock_placements_filter.return_value = '', '', 'Filter SQL', {'filter_param': 'f'} mock_fetchall.return_value = fetchall_mock_response placements_dataloader._get_chart_placements_for_chart_dates( [{ "chart_id": UUID('f4427653-e046-4cd1-813a-bf61806ccf77'), "chart_date": datetime.date.fromisoformat("2020-01-01"), "epoch": 0, }], filter=filter, order=order, show_sme_data=True, permissions=mock_none_permissions, ) mock_fetchall.assert_called_once_with( 'SQL Filter SQL ORDER: position_change DESC nulls last, position ASC', { 'chart_ids_with_dates': [["(0, 'f4427653-e046-4cd1-813a-bf61806ccf77', '2020-01-01')"]], 'filter_param': 'f', } ) @pytest.mark.parametrize( 'order, expected_order_macro', [ [ {'by': 'position_change', 'dir': 'DESC'}, 'position_change DESC' ], [ {'by': 'position', 'dir': 'ASC'}, 'position ASC' ], [ {'by': 'major_moves', 'dir': 'DESC', 'and_then': {'by': 'POSITION', 'dir': 'ASC'}}, 'position_change DESC nulls last, position ASC' ], [ {'by': 'major_moves', 'dir': 'ASC'}, 'position_change ASC nulls last' ], [ {'by': 'new_entries', 'dir': 'ASC'}, 'position_change IS NOT NULL ASC' ], ] ) def test_get_order_macro( order: placements_dataloader.OrderType, expected_order_macro: str ) -> None: """Check _get_order_macro returns correct results""" order_macro = placements_dataloader._get_order_macro(order) assert order_macro == expected_order_macro def test_get_chart_placements_for_chart_dates_dataloader_key_serializer_without_permissions() -> None: """Test _get_chart_placements_for_chart_dates_dataloader_key_serializer without permissions.""" id: ChartDateWithEpochType = { 'chart_id': UUID('c8d6377b-dc3c-4ec0-a02d-31404aaa91a4'), 'chart_date': datetime.date(2024, 1, 2), 'epoch': 0, } result = placements_dataloader._get_chart_placements_for_chart_dates_dataloader_key_serializer( id, filter={}, order={ 'by': 'position', 'dir': 'ASC', 'and_then': None }, show_sme_data=None, permissions=None, ) assert result == 'chart:c8d6377b-dc3c-4ec0-a02d-31404aaa91a4:date:2024-01-02:epoch:0:placements:filter:{}:order_by:position:order_dir:ASC:order_and_then:null' def test_get_chart_placements_for_chart_dates_dataloader_key_serializer_admin( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _get_chart_placements_for_chart_dates_dataloader_key_serializer for an admin.""" id: ChartDateWithEpochType = { 'chart_id': UUID('c8d6377b-dc3c-4ec0-a02d-31404aaa91a4'), 'chart_date': datetime.date(2024, 1, 2), 'epoch': 0, } result = placements_dataloader._get_chart_placements_for_chart_dates_dataloader_key_serializer( id, filter={ 'is_part_of_catalog': True, }, order={ 'by': 'position', 'dir': 'ASC', 'and_then': None }, show_sme_data=False, permissions=mock_admin_permissions, ) assert result == "chart:c8d6377b-dc3c-4ec0-a02d-31404aaa91a4:date:2024-01-02:epoch:0:placements:filter:{'is_part_of_catalog': True}:order_by:position:order_dir:ASC:order_and_then:null:show_sme_data:False:admin" def test_get_chart_placements_for_chart_dates_dataloader_key_serializer_non_admin( mock_non_admin_permissions: permissions.NonAdminPermissionsType, ) -> None: """Test _get_chart_placements_for_chart_dates_dataloader_key_serializer for a non-admin.""" id: ChartDateWithEpochType = { 'chart_id': UUID('c8d6377b-dc3c-4ec0-a02d-31404aaa91a4'), 'chart_date': datetime.date(2024, 1, 2), 'epoch': 0, } result = placements_dataloader._get_chart_placements_for_chart_dates_dataloader_key_serializer( id, filter={ 'is_part_of_catalog': True, }, order={ 'by': 'position', 'dir': 'ASC', 'and_then': None }, show_sme_data=False, permissions=mock_non_admin_permissions, ) assert result == "chart:c8d6377b-dc3c-4ec0-a02d-31404aaa91a4:date:2024-01-02:epoch:0:placements:filter:{'is_part_of_catalog': True}:order_by:position:order_dir:ASC:order_and_then:null:show_sme_data:False:nonadmin:{'artist_ids': [12], 'vendor_ids': [34], 'subaccount_ids': [56], 'label_participant_ids': [78]}" def test_chart_placements_filter_no_filter( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter without any filters.""" response = placements_dataloader._chart_placements_filter( {}, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '(TRUE)', {} ) def test_chart_placements_filter_is_part_of_catalog_false( mock_none_permissions: permissions.NonePermissionsType, ) -> None: """Test _chart_placements_filter with is_part_of_catalog = false.""" with patch.object(placements_dataloader, 'chart_placement_is_part_of_catalog_cte') as mock_is_part_of_catalog: mock_is_part_of_catalog.return_value = 'IS_PART_OF_CATALOG_SQL', { 'is_part_of_catalog_param': True, } response = placements_dataloader._chart_placements_filter( { 'is_part_of_catalog': False, }, show_sme_data=True, permissions=mock_none_permissions, ) assert response == ( 'IS_PART_OF_CATALOG_SQL', 'LEFT JOIN is_part_of_catalog_cte ipc \nON ipc.isrc = fc.isrc AND ipc.input_chart_id = fc.chartid AND ipc.input_chart_date = fc.chart_date\nAND (\n fc.upc IS NULL \n OR \n ARRAY_CONTAINS(fc.upc::VARIANT, ipc.upcs)\n)\n', '((ipc.isrc IS NULL))', { 'is_part_of_catalog_param': True } ) mock_is_part_of_catalog.assert_called_once_with( show_sme_data=True, permissions=mock_none_permissions, ) def test_chart_placements_filter_is_part_of_catalog_true( mock_none_permissions: permissions.NonePermissionsType, ) -> None: """Test _chart_placements_filter with is_part_of_catalog = true.""" with patch.object(placements_dataloader, 'chart_placement_is_part_of_catalog_cte') as mock_is_part_of_catalog: mock_is_part_of_catalog.return_value = 'IS_PART_OF_CATALOG_SQL', { 'is_part_of_catalog_param': True, } response = placements_dataloader._chart_placements_filter( { 'is_part_of_catalog': True, }, show_sme_data=True, permissions=mock_none_permissions, ) assert response == ( 'IS_PART_OF_CATALOG_SQL', 'LEFT JOIN is_part_of_catalog_cte ipc \nON ipc.isrc = fc.isrc AND ipc.input_chart_id = fc.chartid AND ipc.input_chart_date = fc.chart_date\nAND (\n fc.upc IS NULL \n OR \n ARRAY_CONTAINS(fc.upc::VARIANT, ipc.upcs)\n)\n', '((ipc.isrc IS NOT NULL))', { 'is_part_of_catalog_param': True } ) mock_is_part_of_catalog.assert_called_once_with( show_sme_data=True, permissions=mock_none_permissions, ) def test_chart_placements_filter_brand_uuid_in( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with brand_uuid_in.""" with patch.object(placements_dataloader, '_chart_placements_brand_filter') as mock_brand_filter: mock_brand_filter.return_value = 'BRAND_FILTER_SQL', { 'brand_filter_param': True, } response = placements_dataloader._chart_placements_filter( { 'brand_uuid_in': [UUID('3d46b5c4-bc9e-4164-b0af-2612d3f73d85'), UUID('dc43feec-fcc9-46b6-9204-d64a1eacc7d1')], }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((BRAND_FILTER_SQL))', { 'brand_filter_param': True, } ) mock_brand_filter.assert_called_once_with( [UUID('3d46b5c4-bc9e-4164-b0af-2612d3f73d85'), UUID('dc43feec-fcc9-46b6-9204-d64a1eacc7d1')], permissions=mock_admin_permissions, ) def test_chart_placements_filter_position_change_lte( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change lte 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change': { 'lte': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((position_change <= 10))', {} ) def test_chart_placements_filter_position_change_lt( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change lt 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change': { 'lt': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((position_change < 10))', {} ) def test_chart_placements_filter_position_change_eq( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change eq 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change': { 'eq': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((position_change = 10))', {} ) def test_chart_placements_filter_position_change_eq_null( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change eq null.""" response = placements_dataloader._chart_placements_filter( { 'position_change': { 'eq': None, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((position_change IS NULL))', {} ) def test_chart_placements_filter_position_change_neq( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change neq 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change': { 'neq': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((position_change <> 10))', {} ) def test_chart_placements_filter_position_change_neq_null( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change neq null.""" response = placements_dataloader._chart_placements_filter( { 'position_change': { 'neq': None, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((position_change IS NOT NULL))', {} ) def test_chart_placements_filter_position_change_gt( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change gt 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change': { 'gt': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((position_change > 10))', {} ) def test_chart_placements_filter_position_change_gte( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change gte 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change': { 'gte': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((position_change >= 10))', {} ) def test_chart_placements_filter_position_change_abs_lte( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change_abs lte 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change_abs': { 'lte': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((abs(position_change) <= 10))', {} ) def test_chart_placements_filter_position_change_abs_lt( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change_abs lt 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change_abs': { 'lt': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((abs(position_change) < 10))', {} ) def test_chart_placements_filter_position_change_abs_eq( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change_abs eq 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change_abs': { 'eq': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((abs(position_change) = 10))', {} ) def test_chart_placements_filter_position_change_abs_eq_null( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change_abs eq null.""" response = placements_dataloader._chart_placements_filter( { 'position_change_abs': { 'eq': None, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((abs(position_change) IS NULL))', {} ) def test_chart_placements_filter_position_change_abs_neq( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change_abs neq 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change_abs': { 'neq': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((abs(position_change) <> 10))', {} ) def test_chart_placements_filter_position_change_abs_neq_null( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change neq null.""" response = placements_dataloader._chart_placements_filter( { 'position_change_abs': { 'neq': None, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((abs(position_change) IS NOT NULL))', {} ) def test_chart_placements_filter_position_change_abs_gt( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change_abs gt 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change_abs': { 'gt': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((abs(position_change) > 10))', {} ) def test_chart_placements_filter_position_change_abs_gte( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with position_change gte 10.""" response = placements_dataloader._chart_placements_filter( { 'position_change_abs': { 'gte': 10, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( '', '', '((abs(position_change) >= 10))', {} ) def test_chart_placements_filter_all_filters( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_filter with all filters.""" with patch.object(placements_dataloader, 'chart_placement_is_part_of_catalog_cte') as mock_is_part_of_catalog,\ patch.object(placements_dataloader, '_chart_placements_brand_filter') as mock_brand_filter: mock_is_part_of_catalog.return_value = 'IS_PART_OF_CATALOG_SQL', { 'is_part_of_catalog_param': True, } mock_brand_filter.return_value = 'BRAND_FILTER_SQL', { 'brand_filter_param': True, } response = placements_dataloader._chart_placements_filter( { 'brand_uuid_in': [UUID('3d46b5c4-bc9e-4164-b0af-2612d3f73d85'), UUID('dc43feec-fcc9-46b6-9204-d64a1eacc7d1')], 'is_part_of_catalog': True, 'position_change': { 'gte': 5, }, 'position_change_abs': { 'gte': 2, }, }, show_sme_data=True, permissions=mock_admin_permissions, ) assert response == ( 'IS_PART_OF_CATALOG_SQL', 'LEFT JOIN is_part_of_catalog_cte ipc \nON ipc.isrc = fc.isrc AND ipc.input_chart_id = fc.chartid AND ipc.input_chart_date = fc.chart_date\nAND (\n fc.upc IS NULL \n OR \n ARRAY_CONTAINS(fc.upc::VARIANT, ipc.upcs)\n)\n', '((ipc.isrc IS NOT NULL) AND (BRAND_FILTER_SQL) AND (position_change >= 5) AND (abs(position_change) >= 2))', { 'is_part_of_catalog_param': True, 'brand_filter_param': True } ) mock_brand_filter.assert_called_once_with( [UUID('3d46b5c4-bc9e-4164-b0af-2612d3f73d85'), UUID('dc43feec-fcc9-46b6-9204-d64a1eacc7d1')], permissions=mock_admin_permissions, ) def test_chart_placements_brand_filter_for_non_admin( mock_non_admin_permissions: permissions.NonAdminPermissionsType, ) -> None: """Test _chart_placements_brand_filter throws for non admin.""" with pytest.raises(Exception, match='This filter is not available.'): placements_dataloader._chart_placements_brand_filter( [UUID('3d46b5c4-bc9e-4164-b0af-2612d3f73d85'), UUID('dc43feec-fcc9-46b6-9204-d64a1eacc7d1')], permissions=mock_non_admin_permissions, ) def test_chart_placements_brand_filter_empty_list( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_brand_filter with v2 FF and with no uuids.""" with patch.object(placements_dataloader, 'get_sme_data_nfd_filter') as mock_get_sme_data_nfd_filter,\ patch.object(sql_loader, 'load_query') as mock_sql_loader: mock_get_sme_data_nfd_filter.return_value = ['TestNFD1', 'TestNFD2'] mock_sql_loader.return_value = 'MOCK SQL FILTER v2: {{ filter }}' response = placements_dataloader._chart_placements_brand_filter( [], permissions=mock_admin_permissions, ) assert response == ( 'MOCK SQL FILTER v2: (FALSE)', { 'nfd_filter_admin_brands': [["'TestNFD1', 'TestNFD2'"]], } ) mock_sql_loader.assert_called_once_with('chart_placement/brand_subquery') mock_get_sme_data_nfd_filter.assert_called_with(show_sme_data=True) def test_chart_placements_brand_filter_nonempty_list( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_brand_filter with v2 FF and with uuids.""" with patch.object(placements_dataloader, 'get_sme_data_nfd_filter') as mock_get_sme_data_nfd_filter,\ patch.object(sql_loader, 'load_query') as mock_sql_loader: mock_get_sme_data_nfd_filter.return_value = ['TestNFD1', 'TestNFD2'] mock_sql_loader.return_value = 'MOCK SQL FILTER v2: {{ filter }}' response = placements_dataloader._chart_placements_brand_filter( [UUID('3d46b5c4-bc9e-4164-b0af-2612d3f73d85'), UUID('dc43feec-fcc9-46b6-9204-d64a1eacc7d1')], permissions=mock_admin_permissions, ) assert response == ( 'MOCK SQL FILTER v2: ((vcbpc.company_brand_uuid IN (:brand_uuid_in)))', { 'brand_uuid_in': ['3d46b5c4-bc9e-4164-b0af-2612d3f73d85', 'dc43feec-fcc9-46b6-9204-d64a1eacc7d1'], 'nfd_filter_admin_brands': [["'TestNFD1', 'TestNFD2'"]], } ) mock_sql_loader.assert_called_once_with('chart_placement/brand_subquery') mock_get_sme_data_nfd_filter.assert_called_with(show_sme_data=True) def test_chart_placements_brand_filter_sentinel_value( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_brand_filter with v2 FF and with sentinel value.""" with patch.object(placements_dataloader, 'get_sme_data_nfd_filter') as mock_get_sme_data_nfd_filter,\ patch.object(sql_loader, 'load_query') as mock_sql_loader: mock_get_sme_data_nfd_filter.return_value = ['TestNFD1', 'TestNFD2'] mock_sql_loader.return_value = 'MOCK SQL FILTER v2: {{ filter }}' response = placements_dataloader._chart_placements_brand_filter( ['👾'], permissions=mock_admin_permissions, ) assert response == ( 'MOCK SQL FILTER v2: ((vcbpc.company_brand_uuid IS NULL))', { 'nfd_filter_admin_brands': [["'TestNFD1', 'TestNFD2'"]], } ) mock_sql_loader.assert_called_once_with('chart_placement/brand_subquery') mock_get_sme_data_nfd_filter.assert_called_with(show_sme_data=True) def test_chart_placements_brand_filter_mixed_list( mock_admin_permissions: permissions.AdminPermissionsType, ) -> None: """Test _chart_placements_brand_filter with v2 FF and with uuids and sentinel value.""" with patch.object(placements_dataloader, 'get_sme_data_nfd_filter') as mock_get_sme_data_nfd_filter,\ patch.object(sql_loader, 'load_query') as mock_sql_loader: mock_get_sme_data_nfd_filter.return_value = ['TestNFD1', 'TestNFD2'] mock_sql_loader.return_value = 'MOCK SQL FILTER v2: {{ filter }}' response = placements_dataloader._chart_placements_brand_filter( [UUID('3d46b5c4-bc9e-4164-b0af-2612d3f73d85'), '👾', UUID('dc43feec-fcc9-46b6-9204-d64a1eacc7d1')], permissions=mock_admin_permissions, ) assert response == ( 'MOCK SQL FILTER v2: ((vcbpc.company_brand_uuid IN (:brand_uuid_in)) OR (vcbpc.company_brand_uuid IS NULL))', { 'brand_uuid_in': ['3d46b5c4-bc9e-4164-b0af-2612d3f73d85', 'dc43feec-fcc9-46b6-9204-d64a1eacc7d1'], 'nfd_filter_admin_brands': [["'TestNFD1', 'TestNFD2'"]], } ) mock_sql_loader.assert_called_once_with('chart_placement/brand_subquery') mock_get_sme_data_nfd_filter.assert_called_with(show_sme_data=True) def test_is_show_sme_data_required_false() -> None: """Test is_show_sme_data_required when not required.""" result = placements_dataloader.is_show_sme_data_required( filter={ 'position_change': { 'gt': 1, }, }, ) assert not result def test_is_show_sme_data_required_true() -> None: """Test is_show_sme_data_required when required.""" result = placements_dataloader.is_show_sme_data_required( filter={ 'is_part_of_catalog': True }, ) assert result def test_is_permissions_required_false() -> None: """Test is_permissions_required when not required.""" result = placements_dataloader.is_permissions_required( filter={ 'position_change': { 'gt': 1, }, }, ) assert not result def test_is_permissions_required_true() -> None: """Test is_permissions_required when required.""" result = placements_dataloader.is_permissions_required( filter={ 'is_part_of_catalog': True }, ) assert result