diff options
author | Thomas Bruederli <bruederli@kolabsys.com> | 2014-07-09 20:24:51 -0400 |
---|---|---|
committer | Thomas Bruederli <bruederli@kolabsys.com> | 2014-07-09 20:24:51 -0400 |
commit | d1f4cc6e05eea2f7d3b9e0a92ab0a2c5d10e926f (patch) | |
tree | d36d87a0e82120211baf1e572f4c527df1415ca6 /tests/functional | |
parent | 33fc8d4ba377a22e9c4c5a61e22fd7d1e217ffa8 (diff) | |
download | pykolab-d1f4cc6e05eea2f7d3b9e0a92ab0a2c5d10e926f.tar.gz |
Refine invitationpolicy module's code and behavior on re-scheduling and updates
Diffstat (limited to 'tests/functional')
-rw-r--r-- | tests/functional/test_wallace/test_007_invitationpolicy.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/functional/test_wallace/test_007_invitationpolicy.py b/tests/functional/test_wallace/test_007_invitationpolicy.py index b12b785..8dc3ff7 100644 --- a/tests/functional/test_wallace/test_007_invitationpolicy.py +++ b/tests/functional/test_wallace/test_007_invitationpolicy.py @@ -322,6 +322,35 @@ class TestWallaceInvitationpolicy(unittest.TestCase): return event.get_uid() + def update_calendar_event(self, uid, start=None, summary=None, sequence=0, user=None): + if user is None: + user = self.john + + event = self.check_user_calendar_event(user['kolabtargetfolder'], uid) + if event: + if start is not None: + event.set_start(start) + if summary is not None: + event.set_summary(summary) + if sequence is not None: + event.set_sequence(sequence) + + imap = IMAP() + imap.connect() + + mailbox = imap.folder_quote(user['kolabtargetfolder']) + imap.set_acl(mailbox, "cyrus-admin", "lrswipkxtecda") + imap.imap.m.select(mailbox) + + return imap.imap.m.append( + mailbox, + None, + None, + event.to_message().as_string() + ) + + return False + def check_message_received(self, subject, from_addr=None, mailbox=None): if mailbox is None: mailbox = self.john['mailbox'] @@ -641,3 +670,26 @@ class TestWallaceInvitationpolicy(unittest.TestCase): jacks = self.check_user_calendar_event(self.jack['kolabtargetfolder'], uid) self.assertEqual(jacks.get_attendee(self.jane['mail']).get_participant_status(), kolabformat.PartAccepted) self.assertEqual(jacks.get_attendee(self.jack['mail']).get_participant_status(), kolabformat.PartTentative) + + # PART 2: create conflicting event in jack's calendar + new_start = datetime.datetime(2014,8,21, 6,0,0, tzinfo=pytz.timezone("Europe/Berlin")) + self.create_calendar_event(new_start, user=self.jack, attendees=[], summary="blocker") + + # re-schedule initial event to new date + self.update_calendar_event(uid, start=new_start, sequence=1, user=self.john) + self.send_itip_update(self.jane['mail'], uid, new_start, summary="test (updated)", sequence=1) + self.send_itip_update(self.jack['mail'], uid, new_start, summary="test (updated)", sequence=1) + + # wait for replies to be processed and propagated + time.sleep(10) + event = self.check_user_calendar_event(self.john['kolabtargetfolder'], uid) + self.assertIsInstance(event, pykolab.xml.Event) + + # check updated event in organizer's calendar (jack didn't reply yet) + self.assertEqual(event.get_attendee(self.jane['mail']).get_participant_status(), kolabformat.PartAccepted) + self.assertEqual(event.get_attendee(self.jack['mail']).get_participant_status(), kolabformat.PartTentative) + + # check partstats in jack's calendar: jack's status should remain needs-action + jacks = self.check_user_calendar_event(self.jack['kolabtargetfolder'], uid) + self.assertEqual(jacks.get_attendee(self.jane['mail']).get_participant_status(), kolabformat.PartAccepted) + self.assertEqual(jacks.get_attendee(self.jack['mail']).get_participant_status(), kolabformat.PartNeedsAction) |