Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
98b568a244 | ||
|
ea2ee5ea3c |
@ -43,7 +43,7 @@ class FixedDate:
|
|||||||
tuple: day of year (1...366) and year (1...9999) in a tuple
|
tuple: day of year (1...366) and year (1...9999) in a tuple
|
||||||
"""
|
"""
|
||||||
day_of_year = date.timetuple().tm_yday
|
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:
|
def _from_fixed_date(self, day: int, month: int, year: int) -> tuple:
|
||||||
is_this_leap_year = is_leap_year(year)
|
is_this_leap_year = is_leap_year(year)
|
||||||
@ -69,6 +69,10 @@ class FixedDate:
|
|||||||
Returns:
|
Returns:
|
||||||
tuple: day of year (1...366) and year (1...9999) in a tuple
|
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)
|
return (day_of_year, year)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -16,7 +16,7 @@ class TestBasicDateInit(unittest.TestCase):
|
|||||||
self.assertEqual(fixed_date.year_quarter, 1)
|
self.assertEqual(fixed_date.year_quarter, 1)
|
||||||
|
|
||||||
def test_date_init_february_last(self):
|
def test_date_init_february_last(self):
|
||||||
fixed_date = FixedDate(date=datetime.date(2022, 2, 25))
|
fixed_date = FixedDate(datetime.date(2022, 2, 25))
|
||||||
self.assertEqual(fixed_date.date, datetime.date(2022, 2, 25))
|
self.assertEqual(fixed_date.date, datetime.date(2022, 2, 25))
|
||||||
self.assertEqual(fixed_date.year, 2022)
|
self.assertEqual(fixed_date.year, 2022)
|
||||||
self.assertEqual(fixed_date.month, 2)
|
self.assertEqual(fixed_date.month, 2)
|
||||||
@ -87,3 +87,7 @@ class TestBasicDateInit(unittest.TestCase):
|
|||||||
def test_init_with_invalid_parameter_combination(self):
|
def test_init_with_invalid_parameter_combination(self):
|
||||||
# day_of_year also requires year parameter
|
# day_of_year also requires year parameter
|
||||||
self.assertRaises(ValueError, lambda : FixedDate(day_of_year=15))
|
self.assertRaises(ValueError, lambda : FixedDate(day_of_year=15))
|
||||||
|
|
||||||
|
def test_date_init_with_none_arguments(self):
|
||||||
|
fixed_date = FixedDate(datetime.date(2022, 1, 1), None, None, None, None)
|
||||||
|
self.assertEqual(fixed_date.date, datetime.date(2022, 1, 1))
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
import datetime
|
||||||
from fixedcal.core.date import FixedDate
|
from fixedcal.core.date import FixedDate
|
||||||
|
|
||||||
class TestBasicDayOfYearInit(unittest.TestCase):
|
class TestBasicDayOfYearInit(unittest.TestCase):
|
||||||
@ -33,3 +34,28 @@ class TestBasicDayOfYearInit(unittest.TestCase):
|
|||||||
self.assertEqual(fixed_date.month, 13)
|
self.assertEqual(fixed_date.month, 13)
|
||||||
self.assertEqual(fixed_date.day_of_month, 29)
|
self.assertEqual(fixed_date.day_of_month, 29)
|
||||||
self.assertTrue(fixed_date.is_year_day)
|
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))
|
||||||
|
|
||||||
|
def test_day_of_year_init_all_days(self):
|
||||||
|
year_start = datetime.date(2024, 1, 1) # leap year
|
||||||
|
for day_of_year in range(1, 367):
|
||||||
|
fixed_date = FixedDate(day_of_year=day_of_year, year=2024)
|
||||||
|
native_date = year_start + datetime.timedelta(days=day_of_year-1)
|
||||||
|
self.assertEqual(fixed_date.date, native_date)
|
||||||
|
@ -52,3 +52,7 @@ class TestInitWithFixedDate(unittest.TestCase):
|
|||||||
|
|
||||||
def test_month_too_big_raises(self):
|
def test_month_too_big_raises(self):
|
||||||
self.assertRaises(ValueError, lambda : FixedDate(day=15, month=14, year=2022))
|
self.assertRaises(ValueError, lambda : FixedDate(day=15, month=14, year=2022))
|
||||||
|
|
||||||
|
def test_day_month_year_init_with_none_arguments(self):
|
||||||
|
fixed_date = FixedDate(None, None, 1, 1, 2022)
|
||||||
|
self.assertEqual(fixed_date.date, datetime.date(2022, 1, 1))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user