Browse Source

_events_equal: fix key error

Fabian Peter Hammerle 4 years ago
parent
commit
9b6f03f8ca
2 changed files with 139 additions and 1 deletions
  1. 5 1
      ics2vdir/__init__.py
  2. 134 0
      tests/event_test.py

+ 5 - 1
ics2vdir/__init__.py

@@ -53,7 +53,11 @@ def _events_equal(event_a: icalendar.cal.Event, event_b: icalendar.cal.Event) ->
     for key, prop_a in event_a.items():
         if key == "DTSTAMP":
             continue
-        prop_b = event_b[key]
+        try:
+            prop_b = event_b[key]
+        except KeyError:
+            _LOGGER.debug("%s: new key %s", event_a["UID"], key)
+            return False
         if not _event_prop_equal(prop_a, prop_b):
             _LOGGER.debug(
                 "%s/%s: %r != %r", event_a["UID"], key, prop_a, prop_b,

+ 134 - 0
tests/event_test.py

@@ -0,0 +1,134 @@
+import icalendar.cal
+import pytest
+
+import ics2vdir
+
+
+@pytest.mark.parametrize(
+    ("event_a_ical", "event_b_ical", "expected_result"),
+    (
+        [
+            (
+                """BEGIN:VEVENT
+SUMMARY:party
+DTSTART:20201024T100000Z
+DTEND:20201026T120000Z
+DTSTAMP:20200205T160640Z
+UID:123456789@google.com
+SEQUENCE:0
+CREATED:20191231T103841Z
+DESCRIPTION:
+LAST-MODIFIED:20191231T103841Z
+LOCATION:
+STATUS:CONFIRMED
+TRANSP:OPAQUE
+END:VEVENT
+""",
+                """BEGIN:VEVENT
+SUMMARY:party
+DTSTART:20201024T100000Z
+DTEND:20201026T120000Z
+DTSTAMP:20200205T160640Z
+UID:123456789@google.com
+SEQUENCE:0
+CREATED:20191231T103841Z
+DESCRIPTION:
+LAST-MODIFIED:20191231T103841Z
+LOCATION:
+STATUS:CONFIRMED
+TRANSP:OPAQUE
+END:VEVENT
+""",
+                True,
+            ),
+            (
+                """BEGIN:VEVENT
+SUMMARY:party
+DTSTART:20201024T100000Z
+DTEND:20201026T120000Z
+DTSTAMP:20200205T160640Z
+UID:123456789@google.com
+SEQUENCE:0
+CREATED:20191231T103841Z
+DESCRIPTION:
+LAST-MODIFIED:20191231T103841Z
+LOCATION:
+STATUS:CONFIRMED
+TRANSP:OPAQUE
+END:VEVENT
+""",
+                """BEGIN:VEVENT
+SUMMARY:party
+DTSTART:20201024T100000Z
+DTEND:20201026T120000Z
+DTSTAMP:20200205T160640Z
+UID:123456789@google.com
+SEQUENCE:0
+CREATED:20191231T103841Z
+DESCRIPTION:
+LAST-MODIFIED:20191231T103841Z
+STATUS:CONFIRMED
+TRANSP:OPAQUE
+END:VEVENT
+""",
+                False,
+            ),
+            (
+                """BEGIN:VEVENT
+SUMMARY:party
+DTSTART:20201024T100000Z
+DTEND:20201026T120000Z
+DTSTAMP:20200205T160640Z
+UID:123456789@google.com
+SEQUENCE:0
+CREATED:20191231T103841Z
+LAST-MODIFIED:20191231T103841Z
+END:VEVENT
+""",
+                """BEGIN:VEVENT
+SUMMARY:party
+DTSTART:20201024T100000Z
+DTEND:20201026T120000Z
+DTSTAMP:20200205T160640Z
+UID:123456789@google.com
+SEQUENCE:1
+CREATED:20191231T103841Z
+LAST-MODIFIED:20191231T103841Z
+END:VEVENT
+""",
+                False,
+            ),
+            (
+                """BEGIN:VEVENT
+SUMMARY:party
+DTSTART:20201024T100000Z
+DTEND:20201026T120000Z
+DTSTAMP:20200205T160640Z
+UID:123456789@google.com
+SEQUENCE:0
+CREATED:20191231T103841Z
+LAST-MODIFIED:20191231T103841Z
+END:VEVENT
+""",
+                # ignoring DTSTAMP
+                """BEGIN:VEVENT
+SUMMARY:party
+DTSTART:20201024T100000Z
+DTEND:20201026T120000Z
+DTSTAMP:20200205T200640Z
+UID:123456789@google.com
+SEQUENCE:0
+CREATED:20191231T103841Z
+LAST-MODIFIED:20191231T103841Z
+END:VEVENT
+""",
+                True,
+            ),
+        ]
+    ),
+)
+def test__events_equal(event_a_ical, event_b_ical, expected_result):
+    event_a = icalendar.cal.Event.from_ical(event_a_ical)
+    event_b = icalendar.cal.Event.from_ical(event_b_ical)
+    # pylint: disable=protected-access
+    assert ics2vdir._events_equal(event_a, event_b) == expected_result