From 7e0ecd8e0f707f912b66cb438778048b877e203e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Delobelle?= Date: Sun, 21 Jan 2018 17:51:23 +0100 Subject: [PATCH] Add assertion to check ical data is as expected --- shared/tests/testcases.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/shared/tests/testcases.py b/shared/tests/testcases.py index 15792383..14a5fbfe 100644 --- a/shared/tests/testcases.py +++ b/shared/tests/testcases.py @@ -8,6 +8,8 @@ from django.test import Client from django.utils import timezone from django.utils.functional import cached_property +import icalendar + User = get_user_model() @@ -92,6 +94,40 @@ class TestCaseMixin: else: self.assertEqual(actual, expected) + def _test_event_equal(self, event, exp): + for k, v_desc in exp.items(): + if isinstance(v_desc, tuple): + v_getter = v_desc[0] + v = v_desc[1] + else: + v_getter = lambda v: v + v = v_desc + if v_getter(event[k.upper()]) != v: + return False + return True + + def _find_event(self, ev, l): + for i, elt in enumerate(l): + if self._test_event_equal(ev, elt): + return elt, i + return False, -1 + + def assertCalEqual(self, ical_content, expected): + remaining = expected.copy() + unexpected = [] + + cal = icalendar.Calendar.from_ical(ical_content) + + for ev in cal.walk('vevent'): + found, i_found = self._find_event(ev, remaining) + if found: + remaining.pop(i_found) + else: + unexpected.append(ev) + + self.assertListEqual(unexpected, []) + self.assertListEqual(remaining, []) + class ViewTestCaseMixin(TestCaseMixin): """