From 2e506e215f44a6df7299ee0a424931b95fd5062c Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Wed, 9 Jul 2014 17:55:18 -0400 Subject: Shift event end date by one day when converting all-day events from/to iCal --- pykolab/xml/event.py | 9 ++++++++- tests/unit/test-003-event.py | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/pykolab/xml/event.py b/pykolab/xml/event.py index de9e4d9..8550714 100644 --- a/pykolab/xml/event.py +++ b/pykolab/xml/event.py @@ -419,7 +419,11 @@ class Event(object): return self.get_created() def get_ical_dtend(self): - return self.get_end() + dtend = self.get_end() + # shift end by one day on all-day events + if not hasattr(dtend, 'hour'): + dtend = dtend + datetime.timedelta(days=1) + return dtend def get_ical_dtstamp(self): try: @@ -632,6 +636,9 @@ class Event(object): att = self.add_attendee(address, name=name, rsvp=rsvp, role=role, participant_status=partstat, cutype=cutype, params=params) def set_ical_dtend(self, dtend): + # shift end by one day on all-day events + if not hasattr(dtend, 'hour'): + dtend = dtend - datetime.timedelta(days=1) self.set_end(dtend) def set_ical_dtstamp(self, dtstamp): diff --git a/tests/unit/test-003-event.py b/tests/unit/test-003-event.py index 81337d9..2c5a478 100644 --- a/tests/unit/test-003-event.py +++ b/tests/unit/test-003-event.py @@ -1,3 +1,4 @@ +import re import datetime import pytz import sys @@ -218,6 +219,25 @@ METHOD:REQUEST self.assertEqual(parts[3]['Content-ID'].strip('<>'), attachments[0].uri()[4:]) self.assertEqual(parts[4]['Content-ID'].strip('<>'), attachments[1].uri()[4:]) + def test_018_ical_allday_events(self): + ical = """BEGIN:VEVENT +UID:ffffffff-f783-4b58-b404-b1389bd2ffff +DTSTAMP;VALUE=DATE-TIME:20140407T122311Z +CREATED;VALUE=DATE-TIME:20140407T122245Z +DTSTART;VALUE=DATE:20140823 +DTEND;VALUE=DATE:20140824 +SUMMARY:All day +DESCRIPTION:One single day +TRANSP:OPAQUE +CLASS:PUBLIC +END:VEVENT +""" + event = event_from_ical(ical) + self.assertEqual(str(event.get_start()), "2014-08-23") + self.assertEqual(str(event.get_end()), "2014-08-23") + self.assertEqual(str(event.get_ical_dtend()), "2014-08-24") + self.assertTrue(re.match('.*\s*2014-08-23', str(event), re.DOTALL)) + def test_019_as_string_itip(self): self.event.set_summary("test") self.event.set_start(datetime.datetime(2014, 05, 23, 11, 00, 00, tzinfo=pytz.timezone("Europe/London"))) -- cgit v1.1