diff --git a/holidays/holiday_base.py b/holidays/holiday_base.py index cf6ddff394..3ca0082502 100644 --- a/holidays/holiday_base.py +++ b/holidays/holiday_base.py @@ -1136,10 +1136,13 @@ def get_closest_holiday( raise AttributeError(f"Unknown direction: {direction}") dt = self.__keytransform__(target_date or datetime.now().date()) - if direction == "forward" and (next_year := dt.year + 1) not in self.years: - self._populate(next_year) - elif direction == "backward" and (previous_year := dt.year - 1) not in self.years: - self._populate(previous_year) + if self.expand: + if direction == "forward" and (next_year := dt.year + 1) not in self.years: + self.years.add(next_year) + self._populate(next_year) + elif direction == "backward" and (previous_year := dt.year - 1) not in self.years: + self.years.add(previous_year) + self._populate(previous_year) sorted_dates = sorted(self.keys()) position = ( diff --git a/tests/test_holiday_base.py b/tests/test_holiday_base.py index 04dba8228b..e0c7166285 100644 --- a/tests/test_holiday_base.py +++ b/tests/test_holiday_base.py @@ -1477,6 +1477,34 @@ def test_get_closest_holiday_unsorted_calendars(self): (date(2024, 1, 15), "Martin Luther King Jr. Day"), ) + def test_get_closest_holiday_updates_years(self): + us = US(years=2024) + self.assertEqual(us.years, {2024}) + + us.get_closest_holiday(date(2024, 12, 31), "forward") + self.assertIn(2025, us.years) + + us_2 = US(years=2024) + self.assertEqual(us_2.years, {2024}) + + us_2.get_closest_holiday(date(2024, 1, 1), "backward") + self.assertIn(2023, us_2.years) + + def test_get_closest_holiday_expand_false_keeps_state(self): + us = US(years=2024, expand=False) + keys_before = set(us.keys()) + + self.assertIsNone(us.get_closest_holiday(date(2024, 12, 31), "forward")) + self.assertEqual(us.years, {2024}) + self.assertEqual(set(us.keys()), keys_before) + + self.assertEqual( + us.get_closest_holiday(date(2024, 12, 31), "backward"), + (date(2024, 12, 25), "Christmas Day"), + ) + self.assertEqual(us.years, {2024}) + self.assertEqual(set(us.keys()), keys_before) + def test_get_closest_holiday_invalid_direction(self): self.assertRaises( AttributeError, lambda: HolidayBase().get_closest_holiday(direction="invalid")