vdir_test.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import copy
  2. import pathlib
  3. import icalendar.cal
  4. import pytest
  5. import ics2vdir
  6. def _normalize_ical(ical: bytes) -> bytes:
  7. return ical.replace(b"\n", b"\r\n")
  8. _SINGLE_EVENT_ICAL = _normalize_ical(
  9. b"""BEGIN:VEVENT
  10. SUMMARY:party
  11. DTSTART:20201024T100000Z
  12. DTEND:20201026T120000Z
  13. DTSTAMP:20200205T160640Z
  14. UID:1qa2ws3ed4rf5tg@google.com
  15. SEQUENCE:0
  16. CREATED:20191231T103841Z
  17. DESCRIPTION:
  18. LAST-MODIFIED:20191231T103841Z
  19. LOCATION:
  20. STATUS:CONFIRMED
  21. TRANSP:OPAQUE
  22. END:VEVENT
  23. """
  24. )
  25. # pylint: disable=protected-access
  26. @pytest.mark.parametrize(
  27. ("event_ical", "expected_filename"),
  28. [
  29. (_SINGLE_EVENT_ICAL, "1qa2ws3ed4rf5tg@google.com.ics",),
  30. (
  31. b"""BEGIN:VEVENT
  32. SUMMARY:work
  33. DTSTART;TZID=Europe/Vienna:20150924T090000
  34. DTEND;TZID=Europe/Vienna:20150924T123000
  35. DTSTAMP:20200205T160640Z
  36. UID:1qa2ws3ed4rf5tg@google.com
  37. RECURRENCE-ID;TZID=Europe/Vienna:20150924T090000
  38. SEQUENCE:5
  39. CREATED:20140228T212925Z
  40. DESCRIPTION:
  41. LAST-MODIFIED:20150908T181423Z
  42. LOCATION:
  43. STATUS:CONFIRMED
  44. TRANSP:TRANSPARENT
  45. END:VEVENT
  46. """,
  47. "1qa2ws3ed4rf5tg@google.com.20150924T090000+0200.ics",
  48. ),
  49. ],
  50. )
  51. def test__event_vdir_filename(event_ical, expected_filename):
  52. event = icalendar.cal.Event.from_ical(event_ical)
  53. assert ics2vdir._event_vdir_filename(event) == expected_filename
  54. @pytest.mark.parametrize("event_ical", [_SINGLE_EVENT_ICAL])
  55. def test__export_event_create(tmpdir, event_ical):
  56. temp_path = pathlib.Path(tmpdir)
  57. event = icalendar.cal.Event.from_ical(event_ical)
  58. ics2vdir._export_event(event, temp_path)
  59. (ics_path,) = temp_path.iterdir()
  60. assert ics_path.name == "1qa2ws3ed4rf5tg@google.com.ics"
  61. assert ics_path.read_bytes() == _SINGLE_EVENT_ICAL
  62. @pytest.mark.parametrize("event_ical", [_SINGLE_EVENT_ICAL])
  63. def test__export_event_update(tmpdir, event_ical):
  64. temp_path = pathlib.Path(tmpdir)
  65. event = icalendar.cal.Event.from_ical(event_ical)
  66. ics2vdir._export_event(event, temp_path)
  67. event["SUMMARY"] += " suffix"
  68. ics2vdir._export_event(event, temp_path)
  69. (ics_path,) = temp_path.iterdir()
  70. assert ics_path.name == event["UID"] + ".ics"
  71. assert ics_path.read_bytes() == _SINGLE_EVENT_ICAL.replace(
  72. b"party", b"party suffix"
  73. )
  74. @pytest.mark.parametrize("event_ical", [_SINGLE_EVENT_ICAL])
  75. def test__export_event_unchanged(tmpdir, event_ical):
  76. temp_path = pathlib.Path(tmpdir)
  77. event = icalendar.cal.Event.from_ical(event_ical)
  78. ics2vdir._export_event(event, temp_path)
  79. (ics_path,) = temp_path.iterdir()
  80. old_stat = copy.deepcopy(ics_path.stat())
  81. ics2vdir._export_event(event, temp_path)
  82. assert ics_path.stat() == old_stat
  83. assert ics_path.read_bytes() == _SINGLE_EVENT_ICAL