[CMF-checkins] CVS: Products/CMFCore/tests -
test_CMFCatalogAware.py:1.2
Florent Guillaume
fg at nuxeo.com
Thu Apr 14 15:54:18 EDT 2005
Update of /cvs-repository/Products/CMFCore/tests
In directory cvs.zope.org:/tmp/cvs-serv22565/CMFCore/tests
Added Files:
test_CMFCatalogAware.py
Log Message:
Fixed reindexObjectSecurity to work correctly with Zope >= 2.7.6.
=== Products/CMFCore/tests/test_CMFCatalogAware.py 1.1 => 1.2 ===
--- /dev/null Thu Apr 14 15:54:18 2005
+++ Products/CMFCore/tests/test_CMFCatalogAware.py Thu Apr 14 15:54:18 2005
@@ -0,0 +1,151 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Unit tests for CMFCatalogAware.
+
+$Id$
+"""
+
+import unittest
+import Testing
+
+try:
+ import Zope2
+except ImportError:
+ # BBB: for Zope 2.7
+ import Zope as Zope2
+Zope2.startup()
+
+from OFS.Folder import Folder
+from OFS.SimpleItem import SimpleItem
+from Products.CMFCore.CMFCatalogAware import CMFCatalogAware
+
+
+def physicalpath(ob):
+ return '/'.join(ob.getPhysicalPath())
+
+
+class SimpleFolder(Folder):
+ def __init__(self, id):
+ self._setId(id)
+
+class DummyRoot(SimpleFolder):
+ def getPhysicalRoot(self):
+ return self
+
+class DummyCatalog(SimpleItem):
+ def __init__(self):
+ self.log = []
+ self.obs = []
+ def indexObject(self, ob):
+ self.log.append('index %s' % physicalpath(ob))
+ def reindexObject(self, ob, idxs=[], update_metadata=0):
+ self.log.append('reindex %s %s' % (physicalpath(ob), idxs))
+ def unindexObject(self, ob):
+ self.log.append('unindex %s' % physicalpath(ob))
+ def setObs(self, obs):
+ self.obs = [(ob, physicalpath(ob)) for ob in obs]
+ def unrestrictedSearchResults(self, path):
+ res = []
+ for ob, obpath in self.obs:
+ if not (obpath+'/').startswith(path+'/'):
+ continue
+ if obpath == path:
+ # Normal PathIndex skips initial value
+ continue
+ res.append(DummyBrain(ob, obpath))
+ return res
+
+class DummyBrain:
+ def __init__(self, ob, path):
+ self.ob = ob
+ self.path = path
+ def getPath(self):
+ return self.path
+ def getObject(self):
+ if self.ob.getId() == 'hop':
+ raise ValueError("security problem for this object")
+ return self.ob
+
+
+class TheClass(CMFCatalogAware, Folder):
+ def __init__(self, id):
+ self._setId(id)
+ self.notified = False
+ def notifyModified(self):
+ self.notified = True
+
+
+class CMFCatalogAwareTests(unittest.TestCase):
+
+ def setUp(self):
+ self.root = DummyRoot('')
+ self.root.site = SimpleFolder('site')
+ self.site = self.root.site
+ self.site._setObject('portal_catalog', DummyCatalog())
+ self.site.foo = TheClass('foo')
+
+ def test_indexObject(self):
+ foo = self.site.foo
+ cat = self.site.portal_catalog
+ foo.indexObject()
+ self.assertEquals(cat.log, ["index /site/foo"])
+
+ def test_unindexObject(self):
+ foo = self.site.foo
+ cat = self.site.portal_catalog
+ foo.unindexObject()
+ self.assertEquals(cat.log, ["unindex /site/foo"])
+
+ def test_reindexObject(self):
+ foo = self.site.foo
+ cat = self.site.portal_catalog
+ foo.reindexObject()
+ self.assertEquals(cat.log, ["reindex /site/foo []"])
+ self.assert_(foo.notified)
+
+ def test_reindexObject_idxs(self):
+ foo = self.site.foo
+ cat = self.site.portal_catalog
+ foo.reindexObject(idxs=['bar'])
+ self.assertEquals(cat.log, ["reindex /site/foo ['bar']"])
+ self.failIf(foo.notified)
+
+ def test_reindexObjectSecurity(self):
+ foo = self.site.foo
+ self.site.foo.bar = TheClass('bar')
+ bar = self.site.foo.bar
+ self.site.foo.hop = TheClass('hop')
+ hop = self.site.foo.hop
+ cat = self.site.portal_catalog
+ cat.setObs([foo, bar, hop])
+ foo.reindexObjectSecurity()
+ l = list(cat.log)
+ l.sort()
+ self.assertEquals(l, [
+ "reindex /site/foo ['allowedRolesAndUsers']",
+ "reindex /site/foo/bar ['allowedRolesAndUsers']",
+ "reindex /site/foo/hop ['allowedRolesAndUsers']",
+ ])
+ self.failIf(foo.notified)
+ self.failIf(bar.notified)
+ self.failIf(hop.notified)
+
+ # FIXME: more tests needed
+
+def test_suite():
+ return unittest.TestSuite((
+ unittest.makeSuite(CMFCatalogAwareTests),
+ ))
+
+if __name__ == '__main__':
+ main(defaultTest='test_suite')
More information about the CMF-checkins
mailing list