Example #1
0
    def test_free_busy_set_same(self):
        """
        Test that calendar-free-busy-set has the correct value and can be reset to the same.
        """

        request = SimpleRequest(self.site, "GET",
                                "/calendars/users/user01/inbox/")
        inbox = yield request.locateResource("/calendars/users/user01/inbox/")
        self.assertTrue((yield inbox.hasProperty(caldavxml.CalendarFreeBusySet,
                                                 request)))
        prop = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                         request))
        self.assertEqual(prop.children[0],
                         davxml.HRef("/calendars/__uids__/user01/calendar/"))

        newfbset = set()
        newfbset.add("/calendars/users/user01/calendar/")
        newset = caldavxml.CalendarFreeBusySet(
            *[davxml.HRef(url) for url in newfbset])

        yield inbox.writeProperty(newset, request)
        yield request._newStoreTransaction.commit()

        request = SimpleRequest(self.site, "GET",
                                "/calendars/users/user01/inbox/")
        inbox = yield request.locateResource("/calendars/users/user01/inbox/")
        prop = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                         request))
        self.assertEqual(prop.children[0],
                         davxml.HRef("/calendars/__uids__/user01/calendar/"))
        yield request._newStoreTransaction.commit()
        calendar = yield request.locateResource(
            "/calendars/__uids__/user01/calendar/")
        self.assertTrue(calendar._newStoreObject.isUsedForFreeBusy())
Example #2
0
    def test_free_busy_set_tasks(self):
        """
        Test that calendar-free-busy-set ignores tasks calendar.
        """

        request = SimpleRequest(self.site, "GET",
                                "/calendars/users/user01/inbox/")
        inbox = yield request.locateResource("/calendars/users/user01/inbox/")
        self.assertTrue((yield inbox.hasProperty(caldavxml.CalendarFreeBusySet,
                                                 request)))
        prop = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                         request))
        self.assertEqual(set([str(child) for child in prop.children]),
                         set(("/calendars/__uids__/user01/calendar/", )))
        newfbset = set()
        newfbset.add("/calendars/users/user01/tasks/")
        newset = caldavxml.CalendarFreeBusySet(
            *[davxml.HRef(url) for url in newfbset])

        yield inbox.writeProperty(newset, request)
        yield request._newStoreTransaction.commit()

        request = SimpleRequest(self.site, "GET",
                                "/calendars/users/user01/inbox/")
        inbox = yield request.locateResource("/calendars/users/user01/inbox/")
        prop = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                         request))
        self.assertEqual(len(prop.children), 0)
        yield request._newStoreTransaction.commit()
        calendar = yield request.locateResource(
            "/calendars/__uids__/user01/tasks/")
        self.assertFalse(calendar._newStoreObject.isUsedForFreeBusy())
        calendar = yield request.locateResource(
            "/calendars/__uids__/user01/calendar/")
        self.assertFalse(calendar._newStoreObject.isUsedForFreeBusy())
Example #3
0
    def test_free_busy_set_different(self):
        """
        Test that calendar-free-busy-set has the correct value and can be reset to the same.
        """

        txn = self.transactionUnderTest()
        home = (yield txn.calendarHomeWithUID("user01", create=True))
        yield home.createCalendarWithName("calendar_new")
        yield self.commit()

        request = SimpleRequest(self.site, "GET",
                                "/calendars/users/user01/inbox/")
        inbox = yield request.locateResource("/calendars/users/user01/inbox/")
        self.assertTrue((yield inbox.hasProperty(caldavxml.CalendarFreeBusySet,
                                                 request)))
        prop = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                         request))
        self.assertEqual(
            set([str(child) for child in prop.children]),
            set((
                "/calendars/__uids__/user01/calendar/",
                "/calendars/__uids__/user01/calendar_new/",
            )))
        calendar = yield request.locateResource(
            "/calendars/__uids__/user01/calendar_new/")
        self.assertTrue(calendar._newStoreObject.isUsedForFreeBusy())
        calendar = yield request.locateResource(
            "/calendars/__uids__/user01/calendar/")
        self.assertTrue(calendar._newStoreObject.isUsedForFreeBusy())

        newfbset = set()
        newfbset.add("/calendars/users/user01/calendar_new/")
        newset = caldavxml.CalendarFreeBusySet(
            *[davxml.HRef(url) for url in newfbset])

        yield inbox.writeProperty(newset, request)
        yield request._newStoreTransaction.commit()

        request = SimpleRequest(self.site, "GET",
                                "/calendars/users/user01/inbox/")
        inbox = yield request.locateResource("/calendars/users/user01/inbox/")
        prop = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                         request))
        self.assertEqual(
            prop.children[0],
            davxml.HRef("/calendars/__uids__/user01/calendar_new/"))
        yield request._newStoreTransaction.commit()
        calendar = yield request.locateResource(
            "/calendars/__uids__/user01/calendar_new/")
        self.assertTrue(calendar._newStoreObject.isUsedForFreeBusy())
        calendar = yield request.locateResource(
            "/calendars/__uids__/user01/calendar/")
        self.assertFalse(calendar._newStoreObject.isUsedForFreeBusy())
Example #4
0
    def test_free_busy_set_invalid_url(self):
        """
        Test that calendar-free-busy-set will generate an error if an invalid value is used.
        """

        request = SimpleRequest(self.site, "GET",
                                "/calendars/users/user01/inbox/")
        inbox = yield request.locateResource("/calendars/users/user01/inbox/")
        self.assertTrue((yield inbox.hasProperty(caldavxml.CalendarFreeBusySet,
                                                 request)))
        oldfbset = set(("/calendar", ))

        newfbset = set()
        newfbset.update(oldfbset)
        newfbset.add("/calendar-broken")
        newset = caldavxml.CalendarFreeBusySet(
            *[davxml.HRef(url) for url in newfbset])

        self.failUnlessFailure(inbox.writeProperty(newset, request), HTTPError)
Example #5
0
def updateFreeBusySet(value, directory):

    try:
        value = zlib.decompress(value)
    except zlib.error:
        # Legacy data - not zlib compressed
        pass

    try:
        doc = element.WebDAVDocument.fromString(value)
        freeBusySet = doc.root_element
    except ValueError:
        try:
            freeBusySet = unpickle(value)
        except UnpicklingError:
            log.error("Invalid free/busy property value")
            returnValue(None)

    fbset = set()
    didUpdate = False
    for href in freeBusySet.children:
        href = str(href)
        newHref = yield updateFreeBusyHref(href, directory)
        if newHref is None:
            fbset.add(href)
        else:
            didUpdate = True
            if newHref != "":
                fbset.add(newHref)

    if didUpdate:
        property = caldavxml.CalendarFreeBusySet(
            *[element.HRef(fbhref) for fbhref in fbset]
        )
        value = compress(property.toxml())
        returnValue(value)

    returnValue(None)  # no update required
    def test_CalendarTranspProperty(self):

        request = self.oneRequest("/calendars/users/wsanchez/calendar/")

        # Get calendar first
        calendar = (
            yield
            request.locateResource("/calendars/users/wsanchez/calendar/"))
        if calendar is None:
            self.fail("Incorrect response to GET on existent calendar.")

        inbox = (yield
                 request.locateResource("/calendars/users/wsanchez/inbox/"))
        if inbox is None:
            self.fail("Incorrect response to GET on existent inbox.")

        # Provisioned calendar has default opaque property
        transp = (yield calendar.hasProperty(caldavxml.ScheduleCalendarTransp,
                                             request))
        self.assertTrue(transp)

        transp = (yield calendar.readProperty(caldavxml.ScheduleCalendarTransp,
                                              request))
        self.assertEqual(transp,
                         caldavxml.ScheduleCalendarTransp(caldavxml.Opaque()))

        # Inbox property lists the default calendar
        fbset = (yield inbox.hasProperty(caldavxml.CalendarFreeBusySet,
                                         request))
        self.assertTrue(fbset)

        fbset = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                          request))
        self.assertEqual(
            fbset,
            caldavxml.CalendarFreeBusySet(
                davxml.HRef.fromString(
                    "/calendars/__uids__/6423F94A-6B76-4A3A-815B-D52CFD77935D/calendar/"
                ), ))

        # Now remove the property to simulate the old calendar server state with
        # a calendar listed in the fbset
        yield calendar._newStoreObject.setUsedForFreeBusy(False)
        fbset = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                          request))
        self.assertEqual(fbset, caldavxml.CalendarFreeBusySet())

        # Calendar has opaque property derived from inbox
        transp = (yield calendar.hasProperty(caldavxml.ScheduleCalendarTransp,
                                             request))
        self.assertTrue(transp)

        transp = (yield calendar.readProperty(caldavxml.ScheduleCalendarTransp,
                                              request))
        self.assertEqual(
            transp, caldavxml.ScheduleCalendarTransp(caldavxml.Transparent()))

        # Force trailing slash on fbset
        yield inbox.writeProperty(
            caldavxml.CalendarFreeBusySet(
                davxml.HRef.fromString(
                    "/calendars/__uids__/6423F94A-6B76-4A3A-815B-D52CFD77935D/calendar/"
                ), ), request)

        # Now remove the dead property to simulate the old calendar server state with
        # a calendar listed in the fbset
        fbset = (yield inbox.readProperty(caldavxml.CalendarFreeBusySet,
                                          request))
        self.assertEqual(
            fbset,
            caldavxml.CalendarFreeBusySet(
                davxml.HRef.fromString(
                    "/calendars/__uids__/6423F94A-6B76-4A3A-815B-D52CFD77935D/calendar/"
                ), ))

        # Calendar has opaque property derived from inbox
        transp = (yield calendar.hasProperty(caldavxml.ScheduleCalendarTransp,
                                             request))
        self.assertTrue(transp)

        transp = (yield calendar.readProperty(caldavxml.ScheduleCalendarTransp,
                                              request))
        self.assertEqual(transp,
                         caldavxml.ScheduleCalendarTransp(caldavxml.Opaque()))