import datetime from contextlib import nullcontext from unittest.mock import patch import pytest from tadas.pipeline import date_selection @pytest.mark.parametrize( 'load_available_dates_values, expected_result', [ pytest.param( { 'apple_sme': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'apple_theorchard': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'spotify_sme': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'spotify_theorchard': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'tiktok_sme': [datetime.date(2026, 1, 10)], 'tiktok_theorchard': [datetime.date(2026, 1, 10)], }, datetime.date(2026, 1, 10), id='all dsps are available', ), pytest.param( { 'apple_sme': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'apple_theorchard': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'spotify_sme': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'spotify_theorchard': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'tiktok_sme': [datetime.date(2026, 1, 11)], 'tiktok_theorchard': [datetime.date(2026, 1, 10)], }, None, id='no common dates', ), pytest.param( { 'apple_sme': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'apple_theorchard': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'spotify_sme': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'spotify_theorchard': [datetime.date(2026, 1, 11), datetime.date(2026, 1, 10)], 'tiktok_sme': [datetime.date(2026, 1, 10)], 'tiktok_theorchard': [], }, None, id='one dsp is empty', ), ], ) def test_find_latest_available_date(load_available_dates_values, expected_result): with patch.object(date_selection.facts_source, 'load_available_dates', return_value=load_available_dates_values): with pytest.raises(ValueError) if expected_result is None else nullcontext(): result = date_selection.find_latest_available_date(dsps=('apple', 'spotify', 'tiktok')) assert result == expected_result def test_find_common_max_value(): assert date_selection.find_common_max_value([ [0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], ]) == 3