ADD: dav_events: imperfect test for iso date serializer.
This commit is contained in:
74
dav_events/tests/test_converters.py
Normal file
74
dav_events/tests/test_converters.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import sys
|
||||
import datetime
|
||||
from unittest import TestCase
|
||||
|
||||
from ..converters import Iso8601Serializer
|
||||
|
||||
|
||||
class Iso8601SerializerTestCase(TestCase):
|
||||
def _gen_dates(self, start_date, end_date, step=1):
|
||||
date = start_date
|
||||
while date <= end_date:
|
||||
text = '%04d-%02d-%02d' % (date.year, date.month, date.day)
|
||||
yield (date, text)
|
||||
date += datetime.timedelta(step)
|
||||
|
||||
def _gen_times(self, step_hours=1, step_minutes=1, step_seconds=1):
|
||||
for hour in range(0, 13, step_hours):
|
||||
for minute in range(0, 60, step_minutes):
|
||||
for second in range(0, 60, step_seconds):
|
||||
text = '%02d:%02d:%02d' % (hour, minute, second)
|
||||
time = datetime.time(hour, minute, second)
|
||||
yield (time, text)
|
||||
|
||||
def _gen_datetimes(self, start_date, end_date, step_days=47, step_hours=1, step_minutes=13, step_seconds=17):
|
||||
for date, date_text in self._gen_dates(start_date, end_date, step_days):
|
||||
for time, time_text in self._gen_times(step_hours, step_minutes, step_seconds):
|
||||
text = '{}T{}'.format(date_text, time_text)
|
||||
obj = datetime.datetime.combine(date, time)
|
||||
yield (obj, text)
|
||||
|
||||
def test_serialize(self):
|
||||
test_data = []
|
||||
|
||||
# Check date objects
|
||||
# Populate test data with all days between 1970 and 2070
|
||||
test_data += self._gen_dates(datetime.date(1970, 1, 1), datetime.date(2070, 12, 31))
|
||||
# Check time objects
|
||||
test_data += self._gen_times()
|
||||
# Check datetime objects
|
||||
test_data += self._gen_datetimes(datetime.date(1999, 1, 1), datetime.date(2035, 12, 31))
|
||||
|
||||
for obj, text in test_data:
|
||||
expected = 'ISO8601:{}'.format(text)
|
||||
serialized = Iso8601Serializer.serialize(obj)
|
||||
self.assertEqual(serialized, expected)
|
||||
|
||||
# Check invalid input
|
||||
invalid_values = (
|
||||
None, True, False,
|
||||
'2019-03-01',
|
||||
)
|
||||
for value in invalid_values:
|
||||
emsg = ('Expected datetime.datetime, datetime.date or datetime.time,'
|
||||
' not {}'.format(value.__class__.__name__))
|
||||
with self.assertRaisesRegexp(ValueError, emsg):
|
||||
Iso8601Serializer.serialize(value)
|
||||
serialized = Iso8601Serializer.serialize(value, ignore_unsupported_input=True)
|
||||
self.assertEqual(serialized, value)
|
||||
|
||||
def test_deserialize(self):
|
||||
test_data = []
|
||||
|
||||
# Check '<YYYY>-<MM>-<DD>' format
|
||||
test_data += self._gen_dates(datetime.date(1970, 1, 1), datetime.date(2070, 12, 31))
|
||||
# Check '<HH>:<MM>:<SS>' format
|
||||
test_data += self._gen_times()
|
||||
# Check '<YYYY>-<MM>-<DD>T<HH>:<MM>:<SS>' format
|
||||
test_data += self._gen_datetimes(datetime.date(1999, 1, 1), datetime.date(2035, 12, 31))
|
||||
|
||||
for obj, text in test_data:
|
||||
text = 'ISO8601:{}'.format(text)
|
||||
deserialized = Iso8601Serializer.deserialize(text)
|
||||
self.assertIsInstance(deserialized, obj.__class__)
|
||||
self.assertEqual(deserialized, obj)
|
||||
Reference in New Issue
Block a user