diff --git a/fixedcal/core/date.py b/fixedcal/core/date.py index beea0fd..70f86cc 100644 --- a/fixedcal/core/date.py +++ b/fixedcal/core/date.py @@ -43,7 +43,7 @@ class FixedDate: tuple: day of year (1...366) and year (1...9999) in a tuple """ day_of_year = date.timetuple().tm_yday - return self._from_day_of_year(day_of_year, date.year) + return (day_of_year, date.year) def _from_fixed_date(self, day: int, month: int, year: int) -> tuple: is_this_leap_year = is_leap_year(year) @@ -69,6 +69,10 @@ class FixedDate: Returns: tuple: day of year (1...366) and year (1...9999) in a tuple """ + max_day_of_year = 366 if is_leap_year(year) else 365 + if day_of_year < 1 or day_of_year > max_day_of_year: + raise ValueError("Invalid day of year") + return (day_of_year, year) @classmethod diff --git a/tests/basic_day_of_year_test.py b/tests/basic_day_of_year_test.py index d5eb740..c6abb6d 100644 --- a/tests/basic_day_of_year_test.py +++ b/tests/basic_day_of_year_test.py @@ -35,6 +35,20 @@ class TestBasicDayOfYearInit(unittest.TestCase): self.assertEqual(fixed_date.day_of_month, 29) self.assertTrue(fixed_date.is_year_day) + def test_day_of_year_zero(self): + self.assertRaises(ValueError, lambda : FixedDate(day_of_year=0, year=2022)) + + def test_day_of_year_negative(self): + self.assertRaises(ValueError, lambda : FixedDate(day_of_year=-1, year=2022)) + + def test_day_of_year_above_maximum_non_leap_year(self): + # 2022 is not a leap year, so there is no 366th day of year + self.assertRaises(ValueError, lambda : FixedDate(day_of_year=366, year=2022)) + + def test_day_of_year_above_maximum_leap_year(self): + # 2024 is a leap year, but there is no 367th day of year + self.assertRaises(ValueError, lambda : FixedDate(day_of_year=367, year=2024)) + def test_init_day_of_year_with_none_arguments(self): fixed_date = FixedDate(None, 1, None, None, 2022) self.assertEqual(fixed_date.date, datetime.date(2022, 1, 1))