def test_process_request_excludes_includes(self): """ Test that processRequests correctly excludes or includes the specified attendees. """ data = ( ((), None, 3, ("mailto:[email protected]", "mailto:[email protected]", "mailto:[email protected]",),), (("mailto:[email protected]",), None, 2, ("mailto:[email protected]", "mailto:[email protected]",),), ((), ("mailto:[email protected]", "mailto:[email protected]",) , 2, ("mailto:[email protected]", "mailto:[email protected]",),), ) calendar = """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """ for excludes, includes, result_count, result_set in data: scheduler = ImplicitScheduler() scheduler.resource = None scheduler.calendar = Component.fromString(calendar) scheduler.state = "organizer" scheduler.action = "modify" scheduler.internal_request = True scheduler.except_attendees = excludes scheduler.only_refresh_attendees = includes scheduler.changed_rids = None scheduler.reinvites = None scheduler.calendar_home = FakeCalendarHome("user1") # Get some useful information from the calendar yield scheduler.extractCalendarData() scheduler.organizerPrincipal = buildDirectoryRecord(scheduler.calendar_home.uid()) recipients = [] def makeFakeScheduler(): return FakeScheduler(recipients) scheduler.makeScheduler = makeFakeScheduler count = (yield scheduler.processRequests()) self.assertEqual(count, result_count) self.assertEqual(len(recipients), result_count) self.assertEqual(set(recipients), set(result_set))
def test_removed_attendees(self): data = ( ( "#1.1 Simple component, no change", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, (), ), ( "#1.2 Simple component, one removal", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, (("mailto:[email protected]", None),), ), ( "#1.3 Simple component, two removals", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", None), ("mailto:[email protected]", None), ), ), ( "#2.1 Simple recurring component, two removals", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", None), ("mailto:[email protected]", None), ), ), ( "#2.2 Simple recurring component, add exdate", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY EXDATE:20080801T120000Z END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ( "#2.3 Simple recurring component, add multiple comma exdates", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY EXDATE:20080801T120000Z,20080901T120000Z END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 9, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 9, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 9, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ( "#2.3 Simple recurring component, add multiple comma/property exdates", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY EXDATE:20080801T120000Z,20080901T120000Z EXDATE:20081201T120000Z END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 9, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 9, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 9, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 12, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 12, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 12, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ( "#3.1 Complex recurring component with same attendees, no change", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, (), ), ( "#3.2 Complex recurring component with same attendees, change master/override", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", None), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ( "#3.3 Complex recurring component with same attendees, change override", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ( "#3.4 Complex recurring component with same attendees, change master", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", None), ), ), ( "#3.5 Complex recurring component with same attendees, remove override - no exdate", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT END:VCALENDAR """, (), ), ( "#3.6 Complex recurring component with same attendees, remove override - exdate", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY EXDATE:20080801T120000Z END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ( "#4.1 Complex recurring component with different attendees, change master/override", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", None), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ( "#4.2 Complex recurring component with different attendees, remove override - no exdate", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ( "#4.3 Complex recurring component with different attendees, remove override - exdate", """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY END:VEVENT BEGIN:VEVENT UID:12345-67890 RECURRENCE-ID:20080801T120000Z DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] END:VEVENT END:VCALENDAR """, """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:12345-67890 DTSTART:20080601T120000Z DTEND:20080601T130000Z ORGANIZER;CN="User 01":mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] ATTENDEE:mailto:[email protected] RRULE:FREQ=MONTHLY EXDATE:20080801T120000Z END:VEVENT END:VCALENDAR """, ( ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ("mailto:[email protected]", DateTime(2008, 8, 1, 12, 0, 0, tzid=Timezone(utc=True))), ), ), ) for description, calendar1, calendar2, result in data: scheduler = ImplicitScheduler() scheduler.resource = None scheduler.oldcalendar = Component.fromString(calendar1) scheduler.oldAttendeesByInstance = scheduler.oldcalendar.getAttendeesByInstance(True, onlyScheduleAgentServer=True) scheduler.oldInstances = set(scheduler.oldcalendar.getComponentInstances()) scheduler.calendar = Component.fromString(calendar2) scheduler.calendar_home = FakeCalendarHome("user01") yield scheduler.extractCalendarData() scheduler.findRemovedAttendees() self.assertEqual(scheduler.cancelledAttendees, set(result), msg=description)