[Zope-Checkins] CVS: Zope/lib/python/Products/ZCatalog/tests - testBrains.py:1.2

Casey Duncan casey at zope.com
Tue Mar 23 16:27:04 EST 2004


Update of /cvs-repository/Zope/lib/python/Products/ZCatalog/tests
In directory cvs.zope.org:/tmp/cvs-serv13554/tests

Added Files:
	testBrains.py 
Log Message:
Add catalog brain tests to head


=== Zope/lib/python/Products/ZCatalog/tests/testBrains.py 1.1 => 1.2 ===
--- /dev/null	Tue Mar 23 16:27:04 2004
+++ Zope/lib/python/Products/ZCatalog/tests/testBrains.py	Tue Mar 23 16:27:03 2004
@@ -0,0 +1,141 @@
+##############################################################################
+#
+# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (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
+#
+##############################################################################
+"""Unittests for Catalog brains
+
+$Id$"""
+
+import unittest
+import Acquisition
+from zExceptions import Unauthorized
+from ZODB.POSException import ConflictError
+
+class Happy(Acquisition.Implicit):
+    """Happy content"""
+    def __init__(self, id):
+        self.id = id
+
+class Secret(Happy):
+    """Object that raises Unauthorized when accessed"""
+    def __of__(self, parent):
+        raise Unauthorized
+
+class Conflicter(Happy):
+    """Object that raises ConflictError when accessed"""
+    def __of__(self, parent):
+        raise ConflictError
+        
+class DummyRequest(Acquisition.Implicit):
+    
+    def physicalPathToURL(self, path, relative=False):
+        if not relative:
+            path = 'http://superbad.com' + path
+        return path
+
+_marker = object()
+        
+class DummyCatalog(Acquisition.Implicit):
+    
+    _objs = {'/happy':Happy('happy'), 
+             '/secret':Secret('secret'), 
+             '/conflicter':Conflicter('conflicter')}
+    _paths = _objs.keys() + ['/zonked']
+    _paths.sort()
+    
+    def restrictedTraverse(self, path, default=_marker):
+        try:
+            return self._objs[path].__of__(self)
+        except (KeyError, Unauthorized):
+            if default is not _marker:
+                return default
+            raise
+    
+    def getpath(self, rid):
+        return self._paths[rid]
+    
+    def getobject(self, rid):
+        return self.restrictedTraverse(self._paths[rid])
+
+    def resolve_url(self, path, REQUEST):
+        path =  path[path.find('/', path.find('//')+1):] # strip server part
+        return self.restrictedTraverse(path)
+        
+class ConflictingCatalog(DummyCatalog):
+    
+    def getpath(self, rid):
+        raise ConflictError
+
+class TestBrains(unittest.TestCase):
+    
+    def setUp(self):
+        self.cat = DummyCatalog()
+        self.cat.REQUEST = DummyRequest()
+    
+    def makeBrain(self, rid):
+        from Products.ZCatalog.CatalogBrains import AbstractCatalogBrain
+        class Brain(AbstractCatalogBrain):
+            __record_schema__ = {'test_field': 0, 'data_record_id_':1}
+        return Brain(('test', rid)).__of__(self.cat)
+    
+    def testHasKey(self):
+        b = self.makeBrain(1)
+        self.failUnless(b.has_key('test_field'))
+        self.failUnless(b.has_key('data_record_id_'))
+        self.failIf(b.has_key('godel'))
+    
+    def testGetPath(self):
+        b = [self.makeBrain(rid) for rid in range(3)]
+        self.assertEqual(b[0].getPath(), '/conflicter')
+        self.assertEqual(b[1].getPath(), '/happy')
+        self.assertEqual(b[2].getPath(), '/secret')
+    
+    def testGetPathPropagatesConflictErrors(self):
+        self.cat = ConflictingCatalog()
+        b = self.makeBrain(0)
+        self.assertRaises(ConflictError, b.getPath)
+        
+    def testGetURL(self):
+        b = self.makeBrain(0)
+        self.assertEqual(b.getURL(), 'http://superbad.com/conflicter')
+    
+    def testGetRID(self):
+        b = self.makeBrain(42)
+        self.assertEqual(b.getRID(), 42)
+    
+    def testGetObjectHappy(self):
+        b = self.makeBrain(1)
+        self.assertEqual(b.getPath(), '/happy')
+        self.failUnless(b.getObject().aq_base is self.cat.getobject(1).aq_base)
+    
+    def testGetObjectPropagatesConflictErrors(self):
+        b = self.makeBrain(0)
+        self.assertEqual(b.getPath(), '/conflicter')
+        self.assertRaises(ConflictError, b.getObject)
+    
+    def testGetObjectReturnsNoneForUnauthorized(self):
+        b = self.makeBrain(2)
+        self.assertEqual(b.getPath(), '/secret')
+        self.assertEqual(b.getObject(), None)
+    
+    def testGetObjectReturnsNoneForMissing(self):
+        b = self.makeBrain(3)
+        self.assertEqual(b.getPath(), '/zonked')
+        self.assertRaises(KeyError, self.cat.getobject, 3)
+        self.assertEqual(b.getObject(), None)        
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(TestBrains))
+    return suite
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')




More information about the Zope-Checkins mailing list