import pytest from charts.logic.dataloaders.charts.dates.utils import get_chart_date_epochs, chart_date_with_epoch_cache_prefix, ChartDateType, ChartDateWithEpochType, _chart_date_cache_prefix import datetime from typing import List from uuid import UUID from unittest.mock import patch from charts.connectors import redis mock_chart_dates: List[ChartDateType] = [ { "chart_id": UUID("f4427653-e046-4cd1-813a-bf61806ccf77"), "chart_date": datetime.date(2021, 9, 16), }, { "chart_id": UUID("f4427653-e046-4cd1-813a-bf61806ccf88"), "chart_date": datetime.date(2021, 9, 16), } ] expected_mock_chart_dates_epoch_where_epoch_not_exist: List[ChartDateWithEpochType] = [ { "chart_id": UUID("f4427653-e046-4cd1-813a-bf61806ccf77"), "chart_date": datetime.date(2021, 9, 16), "epoch": 0, }, { "chart_id": UUID("f4427653-e046-4cd1-813a-bf61806ccf88"), "chart_date": datetime.date(2021, 9, 16), "epoch": 0, } ] expected_mock_chart_dates_epoch_where_epoch_exists: List[ChartDateWithEpochType] = [ { "chart_id": UUID("f4427653-e046-4cd1-813a-bf61806ccf77"), "chart_date": datetime.date(2021, 9, 16), "epoch": 1, }, { "chart_id": UUID("f4427653-e046-4cd1-813a-bf61806ccf88"), "chart_date": datetime.date(2021, 9, 16), "epoch": 0, } ] def test_get_chart_date_epochs_epoch_not_exist() -> None: """Test get_chart_date_epochs where epoch doesn't exist.""" with patch.object(redis.client, 'mget') as mock_redis_mget: mock_redis_mget.return_value = [None, None] result = get_chart_date_epochs(mock_chart_dates) assert result == expected_mock_chart_dates_epoch_where_epoch_not_exist mock_redis_mget.assert_called_once_with([_chart_date_cache_prefix(chart_date) + ":epoch" for chart_date in mock_chart_dates]) def test_get_chart_date_epochs_epoch_exists() -> None: """Test get_chart_date_epochs where epoch does exist.""" with patch.object(redis.client, 'mget') as mock_redis_mget: mock_redis_mget.return_value = [1, None] result = get_chart_date_epochs(mock_chart_dates) assert result == expected_mock_chart_dates_epoch_where_epoch_exists mock_redis_mget.assert_called_once_with([_chart_date_cache_prefix(chart_date) + ":epoch" for chart_date in mock_chart_dates]) def test_chart_date_with_epoch_cache_prefix() -> None: """Test chart_date_with_epoch_cache_prefix.""" result = chart_date_with_epoch_cache_prefix(expected_mock_chart_dates_epoch_where_epoch_not_exist[0]) assert result == "chart:f4427653-e046-4cd1-813a-bf61806ccf77:date:2021-09-16:epoch:0"