[CalendarServer-changes] [14816] CalendarServer/trunk/txdav

source_changes at macosforge.org source_changes at macosforge.org
Thu May 21 22:52:18 PDT 2015


Revision: 14816
          http://trac.calendarserver.org//changeset/14816
Author:   cdaboo at apple.com
Date:     2015-05-21 22:52:18 -0700 (Thu, 21 May 2015)
Log Message:
-----------
Make sure hidden trash collection is not exposed in sync report results.

Modified Paths:
--------------
    CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py
    CalendarServer/trunk/txdav/common/datastore/sql.py

Modified: CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py	2015-05-22 00:07:30 UTC (rev 14815)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py	2015-05-22 05:52:18 UTC (rev 14816)
@@ -2348,7 +2348,108 @@
         yield self.commit()
 
 
+    @inlineCallbacks
+    def test_homeSyncTokenWithTrash_Visible(self):
+        """
+        L{ICalendarHome.resourceNamesSinceToken} will return the names of
+        calendar objects created since L{ICalendarHome.syncToken} last returned
+        a particular value.
+        """
 
+        self.patch(config, "EnableTrashCollection", True)
+        self.patch(config, "ExposeTrashCollection", True)
+
+        home = yield self.homeUnderTest()
+        cal = yield self.calendarUnderTest()
+        st = yield home.syncToken()
+        yield cal.createCalendarObjectWithName("new.ics", Component.fromString(
+            test_event_text
+        ))
+
+        obj1 = yield cal.calendarObjectWithName("2.ics")
+        yield obj1.remove()
+        yield home.createCalendarWithName("other-calendar")
+        st2 = yield home.syncToken()
+        self.failIfEquals(st, st2)
+
+        home = yield self.homeUnderTest()
+
+        expected = [
+            "calendar_1/",
+            "calendar_1/new.ics",
+            "calendar_1/2.ics",
+            "other-calendar/"
+        ]
+
+        trash = yield home.getTrash()
+        if trash is not None:
+            trashed = yield trash.calendarObjects()
+            expected.extend([
+                "{}/".format(trash.name()),
+                "{}/{}".format(trash.name(), trashed[0].name()),
+            ])
+
+        changed, deleted, invalid = yield home.resourceNamesSinceToken(
+            self.token2revision(st), "infinity")
+
+        self.assertEquals(set(changed), set(expected))
+        self.assertEquals(set(deleted), set(["calendar_1/2.ics"]))
+        self.assertEquals(invalid, [])
+
+        changed, deleted, invalid = yield home.resourceNamesSinceToken(
+            self.token2revision(st2), "infinity")
+        self.assertEquals(changed, [])
+        self.assertEquals(deleted, [])
+        self.assertEquals(invalid, [])
+
+
+    @inlineCallbacks
+    def test_homeSyncTokenWithTrash_Invisible(self):
+        """
+        L{ICalendarHome.resourceNamesSinceToken} will return the names of
+        calendar objects created since L{ICalendarHome.syncToken} last returned
+        a particular value.
+        """
+
+        self.patch(config, "EnableTrashCollection", True)
+
+        home = yield self.homeUnderTest()
+        cal = yield self.calendarUnderTest()
+        st = yield home.syncToken()
+        yield cal.createCalendarObjectWithName("new.ics", Component.fromString(
+            test_event_text
+        ))
+
+        obj1 = yield cal.calendarObjectWithName("2.ics")
+        yield obj1.remove()
+        yield home.createCalendarWithName("other-calendar")
+        st2 = yield home.syncToken()
+        self.failIfEquals(st, st2)
+
+        home = yield self.homeUnderTest()
+
+        expected = [
+            "calendar_1/",
+            "calendar_1/new.ics",
+            "calendar_1/2.ics",
+            "other-calendar/"
+        ]
+
+        changed, deleted, invalid = yield home.resourceNamesSinceToken(
+            self.token2revision(st), "infinity")
+
+        self.assertEquals(set(changed), set(expected))
+        self.assertEquals(set(deleted), set(["calendar_1/2.ics"]))
+        self.assertEquals(invalid, [])
+
+        changed, deleted, invalid = yield home.resourceNamesSinceToken(
+            self.token2revision(st2), "infinity")
+        self.assertEquals(changed, [])
+        self.assertEquals(deleted, [])
+        self.assertEquals(invalid, [])
+
+
+
 class SchedulingTests(CommonCommonTests, unittest.TestCase):
     """
     CalendarObject splitting tests

Modified: CalendarServer/trunk/txdav/common/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/sql.py	2015-05-22 00:07:30 UTC (rev 14815)
+++ CalendarServer/trunk/txdav/common/datastore/sql.py	2015-05-22 05:52:18 UTC (rev 14816)
@@ -2610,11 +2610,22 @@
             (yield self.doChangesQuery(revision))
         ]
 
+        if not config.ExposeTrashCollection:
+            trash = yield self.getTrash(create=False)
+            trashName = trash.name() if trash else None
+        else:
+            trashName = None
+
         changed = set()
         deleted = set()
         invalid = set()
         deleted_collections = set()
         for path, name, wasdeleted in results:
+
+            # Don't report the trash if it is hidden
+            if trashName and path == trashName:
+                continue
+
             if wasdeleted:
                 if name:
                     # Resource deleted - for depth "1" report collection as changed,
@@ -3154,6 +3165,7 @@
                         yield collection.fromTrash(restoreChildren=True)
 
 
+
 class CommonHomeChild(FancyEqMixin, Memoizable, _SharedSyncLogic, HomeChildBase, SharingMixIn):
     """
     Common ancestor class of AddressBooks and Calendars.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20150521/1cf955a5/attachment.html>


More information about the calendarserver-changes mailing list