[CMF-checkins] CVS: Products/CMFCore/tests - test_CatalogTool.py:1.8

Florent Guillaume fg at nuxeo.com
Tue Nov 16 17:07:20 EST 2004


Update of /cvs-repository/Products/CMFCore/tests
In directory cvs.zope.org:/tmp/cvs-serv26064/tests

Modified Files:
	test_CatalogTool.py 
Log Message:
Collector #120: Take into account query restrictions on 'effective' or
'expires' attributes during a search.



=== Products/CMFCore/tests/test_CatalogTool.py 1.7 => 1.8 ===
--- Products/CMFCore/tests/test_CatalogTool.py:1.7	Mon Apr 26 08:14:17 2004
+++ Products/CMFCore/tests/test_CatalogTool.py	Tue Nov 16 17:06:50 2004
@@ -4,9 +4,14 @@
 Zope.startup()
 from Interface.Verify import verifyClass
 
+from DateTime import DateTime
 from Products.CMFCore.CatalogTool import CatalogTool
 from Products.CMFCore.CatalogTool import IndexableObjectWrapper
 from Products.CMFCore.tests.base.dummy import DummyContent
+from Products.CMFCore.tests.base.testcase import SecurityTest
+from Products.CMFCore.tests.base.security import UserWithRoles
+from Products.CMFCore.tests.base.security import OmnipotentUser
+from AccessControl.SecurityManagement import newSecurityManager
 
 
 class IndexableObjectWrapperTests(TestCase):
@@ -18,7 +23,15 @@
         verifyClass(IIndexableObjectWrapper, IndexableObjectWrapper)
 
 
-class CatalogToolTests( TestCase ):
+class CatalogToolTests(SecurityTest):
+
+    def loginWithRoles(self, *roles):
+        user = UserWithRoles(*roles).__of__(self.root)
+        newSecurityManager(None, user)
+
+    def loginManager(self):
+        user = OmnipotentUser().__of__(self.root)
+        newSecurityManager(None, user)
 
     def test_processActions( self ):
         """
@@ -42,6 +55,179 @@
         verifyClass(IActionProvider, CatalogTool)
         verifyClass(IZCatalog, CatalogTool)
 
+    def test_search_anonymous(self):
+        catalog = CatalogTool()
+        dummy = DummyContent(catalog=1)
+        catalog.catalog_object(dummy, '/dummy')
+
+        self.assertEqual(1, len(catalog._catalog.searchResults()))
+        self.assertEqual(0, len(catalog.searchResults()))
+
+    def test_search_inactive(self):
+        catalog = CatalogTool()
+        now = DateTime()
+        dummy = DummyContent(catalog=1)
+        dummy._View_Permission = ('Blob',)
+
+        self.loginWithRoles('Blob')
+
+        # not yet effective
+        dummy.effective = now+1
+        dummy.expires = now+2
+        catalog.catalog_object(dummy, '/dummy')
+        self.assertEqual(1, len(catalog._catalog.searchResults()))
+        self.assertEqual(0, len(catalog.searchResults()))
+
+        # already expired
+        dummy.effective = now-2
+        dummy.expires = now-1
+        catalog.catalog_object(dummy, '/dummy')
+        self.assertEqual(1, len(catalog._catalog.searchResults()))
+        self.assertEqual(0, len(catalog.searchResults()))
+
+    def test_search_restrict_manager(self):
+        catalog = CatalogTool()
+        now = DateTime()
+        dummy = DummyContent(catalog=1)
+
+        self.loginManager()
+
+        # already expired
+        dummy.effective = now-4
+        dummy.expires = now-2
+        catalog.catalog_object(dummy, '/dummy')
+        self.assertEqual(1, len(catalog._catalog.searchResults()))
+        self.assertEqual(1, len(catalog.searchResults()))
+
+        self.assertEqual(1, len(catalog.searchResults(
+            expires={'query': now-3, 'range': 'min'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now-1, 'range': 'min'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now-3, 'range': 'max'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            expires={'query': now-1, 'range': 'max'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            expires={'query': (now-3, now-1), 'range': 'min:max'})))
+
+    def test_search_restrict_inactive(self):
+        catalog = CatalogTool()
+        now = DateTime()
+        dummy = DummyContent(catalog=1)
+        dummy._View_Permission = ('Blob',)
+
+        self.loginWithRoles('Blob')
+
+        # already expired
+        dummy.effective = now-4
+        dummy.expires = now-2
+        catalog.catalog_object(dummy, '/dummy')
+        self.assertEqual(1, len(catalog._catalog.searchResults()))
+        self.assertEqual(0, len(catalog.searchResults()))
+
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now-3, 'range': 'min'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now-3, 'range': 'max'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now+3, 'range': 'min'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now+3, 'range': 'max'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': (now-3, now-1), 'range': 'min:max'})))
+
+    def test_search_restrict_visible(self):
+        catalog = CatalogTool()
+        now = DateTime()
+        dummy = DummyContent(catalog=1)
+        dummy._View_Permission = ('Blob',)
+
+        self.loginWithRoles('Blob')
+
+        # visible
+        dummy.effective = now-2
+        dummy.expires = now+2
+        catalog.catalog_object(dummy, '/dummy')
+        self.assertEqual(1, len(catalog._catalog.searchResults()))
+        self.assertEqual(1, len(catalog.searchResults()))
+
+        self.assertEqual(0, len(catalog.searchResults(
+            effective={'query': now-1, 'range': 'min'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            effective={'query': now-1, 'range': 'max'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            effective={'query': now+1, 'range': 'min'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            effective={'query': now+1, 'range': 'max'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            effective={'query': (now-1, now+1), 'range': 'min:max'})))
+
+        self.assertEqual(1, len(catalog.searchResults(
+            effective={'query': now-3, 'range': 'min'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            effective={'query': now-3, 'range': 'max'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            effective={'query': now+3, 'range': 'min'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            effective={'query': now+3, 'range': 'max'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            effective={'query': (now-3, now+3), 'range': 'min:max'})))
+
+        self.assertEqual(1, len(catalog.searchResults(
+            expires={'query': now-1, 'range': 'min'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now-1, 'range': 'max'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            expires={'query': now+1, 'range': 'min'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now+1, 'range': 'max'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': (now-1, now+1), 'range': 'min:max'})))
+
+        self.assertEqual(1, len(catalog.searchResults(
+            expires={'query': now-3, 'range': 'min'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now-3, 'range': 'max'})))
+        self.assertEqual(0, len(catalog.searchResults(
+            expires={'query': now+3, 'range': 'min'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            expires={'query': now+3, 'range': 'max'})))
+        self.assertEqual(1, len(catalog.searchResults(
+            expires={'query': (now-3, now+3), 'range': 'min:max'})))
+
+        self.assertEqual(1, len(catalog.searchResults(
+            effective={'query': now-1, 'range': 'max'},
+            expires={'query': now+1, 'range': 'min'})))
+
+        self.assertEqual(0, len(catalog.searchResults(
+            effective={'query': now+1, 'range': 'max'},
+            expires={'query': now+3, 'range': 'min'})))
+
+    def test_convertQuery(self):
+        convert = CatalogTool()._convertQuery
+
+        kw = {}
+        convert(kw)
+        self.assertEqual(kw, {})
+
+        kw = {'expires': 5, 'expires_usage': 'brrr:min'}
+        self.assertRaises(ValueError, convert, kw)
+
+        kw = {'foo': 'bar'}
+        convert(kw)
+        self.assertEqual(kw, {'foo': 'bar'})
+
+        kw = {'expires': 5, 'expires_usage': 'range:min'}
+        convert(kw)
+        self.assertEqual(kw, {'expires': {'query': 5, 'range': 'min'}})
+
+        kw = {'expires': 5, 'expires_usage': 'range:max'}
+        convert(kw)
+        self.assertEqual(kw, {'expires': {'query': 5, 'range': 'max'}})
+
+        kw = {'expires': (5,7), 'expires_usage': 'range:min:max'}
+        convert(kw)
+        self.assertEqual(kw, {'expires': {'query': (5,7), 'range': 'min:max'}})
 
 
 def test_suite():



More information about the CMF-checkins mailing list