pykolab/xml tests/unit

Thomas Brüderli bruederli at kolabsys.com
Tue Feb 24 16:15:13 CET 2015


 pykolab/xml/event.py         |    5 +++--
 tests/unit/test-003-event.py |   27 +++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 2 deletions(-)

New commits:
commit b797505f35b3fbaa0eaf202ed4d11d5f4aa39f75
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Mon Feb 23 20:48:15 2015 -0500

    Fix event.get_instance() calls for all-day events (#4709)

diff --git a/pykolab/xml/event.py b/pykolab/xml/event.py
index 31ea476..4158d31 100644
--- a/pykolab/xml/event.py
+++ b/pykolab/xml/event.py
@@ -1379,9 +1379,10 @@ class Event(object):
 
     def get_instance(self, _datetime):
         # If no timezone information is given, use the one from event start
-        if _datetime.tzinfo == None:
+        if isinstance(_datetime, datetime.datetime) and _datetime.tzinfo == None:
             _start = self.get_start()
-            _datetime = _datetime.replace(tzinfo=_start.tzinfo)
+            if hasattr(_start, 'tzinfo'):
+                _datetime = _datetime.replace(tzinfo=_start.tzinfo)
 
         instance = self.get_next_instance(_datetime - datetime.timedelta(days=1))
         while instance:
diff --git a/tests/unit/test-003-event.py b/tests/unit/test-003-event.py
index cc27e58..1f9f36b 100644
--- a/tests/unit/test-003-event.py
+++ b/tests/unit/test-003-event.py
@@ -690,6 +690,33 @@ END:VEVENT
         occurrence = event.get_next_instance(event.get_start())
         self.assertEqual(occurrence.get_summary(), "Exception")
 
+    def test_021_allday_recurrence(self):
+        rrule = kolabformat.RecurrenceRule()
+        rrule.setFrequency(kolabformat.RecurrenceRule.Daily)
+        rrule.setCount(10)
+
+        self.event = Event()
+        self.event.set_summary('alldays')
+        self.event.set_recurrence(rrule);
+
+        _start = datetime.date(2015,1,1)
+        self.event.set_start(_start)
+        self.event.set_end(_start)
+
+        exdate = datetime.date(2015,1,5)
+        xmlexception = Event(from_string=str(self.event))
+        xmlexception.set_start(exdate)
+        xmlexception.set_end(exdate)
+        xmlexception.set_recurrence_id(exdate, False)
+        xmlexception.set_status('CANCELLED')
+        self.event.add_exception(xmlexception)
+
+        inst3 = self.event.get_instance(datetime.date(2015,1,3))
+        self.assertEqual(inst3.get_start(), datetime.date(2015,1,3))
+
+        inst5 = self.event.get_instance(exdate)
+        self.assertEqual(inst5.get_status(True), 'CANCELLED')
+
     def test_021_ical_exceptions(self):
         self.event.set_summary("test")
         self.event.set_start(datetime.datetime(2014, 05, 23, 11, 00, 00, tzinfo=pytz.timezone("Europe/London")))




More information about the commits mailing list