From a14fec6b2aecc91f99fe2647f175b8fa0a4a70c0 Mon Sep 17 00:00:00 2001 From: Jens Kleineheismann Date: Tue, 26 Mar 2019 17:20:56 +0100 Subject: [PATCH] ADD: dav_events: imperfect test for iso date serializer. --- dav_events/tests/test_converters.py | 74 +++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 dav_events/tests/test_converters.py diff --git a/dav_events/tests/test_converters.py b/dav_events/tests/test_converters.py new file mode 100644 index 0000000..a43c796 --- /dev/null +++ b/dav_events/tests/test_converters.py @@ -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 '--
' format + test_data += self._gen_dates(datetime.date(1970, 1, 1), datetime.date(2070, 12, 31)) + # Check '::' format + test_data += self._gen_times() + # Check '--
T::' 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)