def test_freebusy(self): """ Test that action=component works. """ yield self.createShare("user01", "puser01") calendar1 = yield self.calendarUnderTest(txn=self.theTransactionUnderTest(0), home="user01", name="calendar") yield calendar1.createCalendarObjectWithName("1.ics", Component.fromString(self.caldata1)) yield self.commitTransaction(0) fbstart = "{now:04d}0102T000000Z".format(**self.nowYear) fbend = "{now:04d}0103T000000Z".format(**self.nowYear) shared = yield self.calendarUnderTest(txn=self.theTransactionUnderTest(1), home="puser01", name="shared-calendar") fbinfo = FreebusyQuery.FBInfo([], [], []) timerange = Period(DateTime.parseText(fbstart), DateTime.parseText(fbend)) organizer = recipient = (yield calendarUserFromCalendarUserAddress("mailto:[email protected]", self.theTransactionUnderTest(1))) freebusy = FreebusyQuery(organizer=organizer, recipient=recipient, timerange=timerange) matchtotal = (yield freebusy.generateFreeBusyInfo([shared, ], fbinfo)) self.assertEqual(matchtotal, 1) self.assertEqual(fbinfo[0], [Period.parseText("{now:04d}0102T140000Z/PT1H".format(**self.nowYear)), ]) self.assertEqual(len(fbinfo[1]), 0) self.assertEqual(len(fbinfo[2]), 0) yield self.commitTransaction(1)
def test_freebusy(self): """ Test that action=component works. """ yield self.createShare("user01", "puser01") calendar1 = yield self.calendarUnderTest(txn=self.theTransactionUnderTest(0), home="user01", name="calendar") yield calendar1.createCalendarObjectWithName("1.ics", Component.fromString(self.caldata1)) yield self.commitTransaction(0) fbstart = "{now:04d}0102T000000Z".format(**self.nowYear) fbend = "{now:04d}0103T000000Z".format(**self.nowYear) shared = yield self.calendarUnderTest(txn=self.theTransactionUnderTest(1), home="puser01", name="shared-calendar") fbinfo = FreebusyQuery.FBInfo([], [], []) timerange = Period(DateTime.parseText(fbstart), DateTime.parseText(fbend)) organizer = recipient = (yield calendarUserFromCalendarUserAddress("mailto:[email protected]", self.theTransactionUnderTest(1))) freebusy = FreebusyQuery(organizer=organizer, recipient=recipient, timerange=timerange) matchtotal = (yield freebusy.generateFreeBusyInfo([shared, ], fbinfo)) self.assertEqual(matchtotal, 1) self.assertEqual(fbinfo[0], [Period.parseText("{now:04d}0102T140000Z/PT1H".format(**self.nowYear)), ]) self.assertEqual(len(fbinfo[1]), 0) self.assertEqual(len(fbinfo[2]), 0) yield self.commitTransaction(1)
def test_one_event_event_details(self): """ Test when the calendar is empty. """ data = """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:1234-5678 DTSTAMP:20080601T000000Z DTSTART:%s DTEND:%s END:VEVENT END:VCALENDAR """ % (self.now_12H.getText(), self.now_13H.getText(),) yield self._createCalendarObject(data, "user01", "test.ics") calendar = (yield self.calendarUnderTest(home="user01", name="calendar_1")) fbinfo = FreebusyQuery.FBInfo([], [], []) timerange = Period(self.now, self.now_1D) event_details = [] organizer = recipient = yield calendarUserFromCalendarUserAddress("mailto:[email protected]", self.transactionUnderTest()) freebusy = FreebusyQuery(organizer=organizer, recipient=recipient, timerange=timerange, event_details=event_details) freebusy.same_calendar_user = True result = yield freebusy.generateFreeBusyInfo([calendar, ], fbinfo) self.assertEqual(result, 1) self.assertEqual(fbinfo.busy, [Period(self.now_12H, self.now_13H), ]) self.assertEqual(len(fbinfo.tentative), 0) self.assertEqual(len(fbinfo.unavailable), 0) self.assertEqual(len(event_details), 1) self.assertEqual(str(event_details[0]), str(tuple(Component.fromString(data).subcomponents())[0]))
def test_no_events(self): """ Test when the calendar is empty. """ calendar = (yield self.calendarUnderTest(home="user01", name="calendar_1")) fbinfo = FreebusyQuery.FBInfo([], [], []) timerange = Period(self.now, self.now_1D) organizer = recipient = yield calendarUserFromCalendarUserAddress("mailto:[email protected]", self.transactionUnderTest()) freebusy = FreebusyQuery(organizer=organizer, recipient=recipient, timerange=timerange) result = (yield freebusy.generateFreeBusyInfo([calendar, ], fbinfo)) self.assertEqual(result, 0) self.assertEqual(len(fbinfo.busy), 0) self.assertEqual(len(fbinfo.tentative), 0) self.assertEqual(len(fbinfo.unavailable), 0)
def test_one_event_event_details(self): """ Test when the calendar is empty. """ data = """BEGIN:VCALENDAR VERSION:2.0 PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN BEGIN:VEVENT UID:1234-5678 DTSTAMP:20080601T000000Z DTSTART:%s DTEND:%s END:VEVENT END:VCALENDAR """ % ( self.now_12H.getText(), self.now_13H.getText(), ) yield self._createCalendarObject(data, "user01", "test.ics") calendar = (yield self.calendarUnderTest(home="user01", name="calendar_1")) fbinfo = FreebusyQuery.FBInfo([], [], []) timerange = Period(self.now, self.now_1D) event_details = [] organizer = recipient = yield calendarUserFromCalendarUserAddress( "mailto:[email protected]", self.transactionUnderTest()) freebusy = FreebusyQuery(organizer=organizer, recipient=recipient, timerange=timerange, event_details=event_details) freebusy.same_calendar_user = True result = yield freebusy.generateFreeBusyInfo([ calendar, ], fbinfo) self.assertEqual(result, 1) self.assertEqual(fbinfo.busy, [ Period(self.now_12H, self.now_13H), ]) self.assertEqual(len(fbinfo.tentative), 0) self.assertEqual(len(fbinfo.unavailable), 0) self.assertEqual(len(event_details), 1) self.assertEqual( str(event_details[0]), str(tuple(Component.fromString(data).subcomponents())[0]))
def recv_freebusy(self, txn, request): """ Process a freebusy cross-pod request. Message arguments as per L{send_freebusy}. @param request: request arguments @type request: C{dict} """ # Operate on the L{CommonHomeChild} calresource, _ignore = yield self._getStoreObjectForRequest( txn, request) organizer = yield calendarUserFromCalendarUserAddress( request["organizer"], txn) if request["organizer"] else None recipient = yield calendarUserFromCalendarUserAddress( request["recipient"], txn) if request["recipient"] else None freebusy = FreebusyQuery( organizer=organizer, recipient=recipient, timerange=Period.parseText(request["timerange"]), excludeUID=request["excludeuid"], event_details=request["event_details"], ) fbinfo = FreebusyQuery.FBInfo([], [], []) matchtotal = yield freebusy.generateFreeBusyInfo( [ calresource, ], fbinfo, matchtotal=request["matchtotal"], ) # Convert L{Period} objects to text for JSON response returnValue({ "fbresults": [ [item.getText() for item in fbinfo.busy], [item.getText() for item in fbinfo.tentative], [item.getText() for item in fbinfo.unavailable], ], "matchtotal": matchtotal, })
def test_no_events(self): """ Test when the calendar is empty. """ calendar = (yield self.calendarUnderTest(home="user01", name="calendar_1")) fbinfo = FreebusyQuery.FBInfo([], [], []) timerange = Period(self.now, self.now_1D) organizer = recipient = yield calendarUserFromCalendarUserAddress( "mailto:[email protected]", self.transactionUnderTest()) freebusy = FreebusyQuery(organizer=organizer, recipient=recipient, timerange=timerange) result = (yield freebusy.generateFreeBusyInfo([ calendar, ], fbinfo)) self.assertEqual(result, 0) self.assertEqual(len(fbinfo.busy), 0) self.assertEqual(len(fbinfo.tentative), 0) self.assertEqual(len(fbinfo.unavailable), 0)
def recv_freebusy(self, txn, request): """ Process a freebusy cross-pod request. Message arguments as per L{send_freebusy}. @param request: request arguments @type request: C{dict} """ # Operate on the L{CommonHomeChild} calresource, _ignore = yield self._getStoreObjectForRequest(txn, request) organizer = yield calendarUserFromCalendarUserAddress(request["organizer"], txn) if request["organizer"] else None recipient = yield calendarUserFromCalendarUserAddress(request["recipient"], txn) if request["recipient"] else None freebusy = FreebusyQuery( organizer=organizer, recipient=recipient, timerange=Period.parseText(request["timerange"]), excludeUID=request["excludeuid"], event_details=request["event_details"], ) fbinfo = FreebusyQuery.FBInfo([], [], []) matchtotal = yield freebusy.generateFreeBusyInfo( [calresource, ], fbinfo, matchtotal=request["matchtotal"], ) # Convert L{Period} objects to text for JSON response returnValue({ "fbresults": [ [item.getText() for item in fbinfo.busy], [item.getText() for item in fbinfo.tentative], [item.getText() for item in fbinfo.unavailable], ], "matchtotal": matchtotal, })