"""Test for the Chart Handler.""" import datetime from unittest.mock import patch, call, MagicMock from uuid import UUID from charts.connectors import redis from charts.logic.dataloaders.charts.dates_dataloader import chart_dates_dataloader from charts.logic.dataloaders.charts.metadata_dataloader import chart_metadata_dataloader from charts.logic.dataloaders.charts.dates.placements_dataloader import chart_placements_for_chart_date_dataloader from charts.logic.dataloaders.charts.dates.utils import ChartDateType, ChartDateWithEpochType from charts.logic import cache_prime from charts.logic.dataloaders.charts.dates.utils import _chart_date_cache_prefix mock_chart_dates_with_epoch = [ ChartDateWithEpochType({ 'chart_id': UUID('10b52bd4-b379-435c-a4aa-e507a6ac68e6'), 'chart_date': datetime.date.fromisoformat('2024-01-01'), 'epoch': 0, }), ChartDateWithEpochType({ 'chart_id': UUID('10b52bd4-b379-435c-a4aa-e507a6ac68e6'), 'chart_date': datetime.date.fromisoformat('2024-01-02'), 'epoch': 1, }), ChartDateWithEpochType({ 'chart_id': UUID('54393b40-7cc6-45c9-86eb-9c26e77658d3'), 'chart_date': datetime.date.fromisoformat('2024-01-01'), 'epoch': 2, }), ] mock_chart_dates_with_epoch_incremented = [ ChartDateWithEpochType({ 'chart_id': UUID('10b52bd4-b379-435c-a4aa-e507a6ac68e6'), 'chart_date': datetime.date.fromisoformat('2024-01-01'), 'epoch': 1, }), ChartDateWithEpochType({ 'chart_id': UUID('10b52bd4-b379-435c-a4aa-e507a6ac68e6'), 'chart_date': datetime.date.fromisoformat('2024-01-02'), 'epoch': 2, }), ChartDateWithEpochType({ 'chart_id': UUID('54393b40-7cc6-45c9-86eb-9c26e77658d3'), 'chart_date': datetime.date.fromisoformat('2024-01-01'), 'epoch': 3, }), ] def test_prime_charts_cache() -> None: chart_dates = [ ChartDateType({ 'chart_id': UUID('10b52bd4-b379-435c-a4aa-e507a6ac68e6'), 'chart_date': datetime.date.fromisoformat('2024-01-01'), }), ChartDateType({ 'chart_id': UUID('10b52bd4-b379-435c-a4aa-e507a6ac68e6'), 'chart_date': datetime.date.fromisoformat('2024-01-02'), }), ChartDateType({ 'chart_id': UUID('54393b40-7cc6-45c9-86eb-9c26e77658d3'), 'chart_date': datetime.date.fromisoformat('2024-01-01'), }), ] with patch.object(redis.client, 'mset') as mock_mset,\ patch.object(cache_prime, 'get_chart_date_epochs') as mock_get_chart_dates_with_epochs,\ patch.object(chart_placements_for_chart_date_dataloader, 'load_many_no_cache_read') as mock_chart_placements_for_chart_date_dataloader,\ patch.object(chart_dates_dataloader, 'load_many_no_cache_read') as mock_chart_date_load,\ patch.object(chart_metadata_dataloader, 'load_many_no_cache_read') as mock_chart_metadata_load: mock_get_chart_dates_with_epochs.return_value = mock_chart_dates_with_epoch cache_prime.prime_charts_cache(chart_dates) new_epochs = { _chart_date_cache_prefix(chart_date) + ":epoch": chart_date['epoch'] for chart_date in mock_chart_dates_with_epoch_incremented } mock_mset.assert_called_once_with(new_epochs) mock_chart_placements_for_chart_date_dataloader.assert_called_once_with( mock_chart_dates_with_epoch_incremented, filter={}, order={ 'by': 'position', 'dir': 'ASC', 'and_then': None }, show_sme_data=None, permissions=None, ) mock_chart_date_load.assert_called_once() assert len(mock_chart_date_load.call_args) == 2 called_chart_ids = set(chart_id['chart_id'] for chart_id in mock_chart_date_load.call_args[0][0]) assert called_chart_ids == { UUID('10b52bd4-b379-435c-a4aa-e507a6ac68e6'), UUID('54393b40-7cc6-45c9-86eb-9c26e77658d3'), } mock_chart_metadata_load.assert_called_once() assert len(mock_chart_metadata_load.call_args) == 2 called_chart_ids = set(chart_id['chart_id'] for chart_id in mock_chart_metadata_load.call_args[0][0]) assert called_chart_ids == { UUID('10b52bd4-b379-435c-a4aa-e507a6ac68e6'), UUID('54393b40-7cc6-45c9-86eb-9c26e77658d3'), }