[Erp5-report] r25605 - /erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Feb 18 14:42:42 CET 2009


Author: vincent
Date: Wed Feb 18 14:42:41 2009
New Revision: 25605

URL: http://svn.erp5.org?rev=25605&view=rev
Log:
Test indexation acquisition context independance.

Modified:
    erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py

Modified: erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py?rev=25605&r1=25604&r2=25605&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py [utf8] (original)
+++ erp5/trunk/products/ERP5Catalog/tests/testERP5Catalog.py [utf8] Wed Feb 18 14:42:41 2009
@@ -47,6 +47,36 @@
 try:
   from transaction import get as get_transaction
 except ImportError:
+  pass
+
+from OFS.ObjectManager import ObjectManager
+from random import randint
+
+class IndexableDocument(ObjectManager):
+  def getUid(self):
+    uid = getattr(self, 'uid', None)
+    if uid is None:
+      self.uid = uid = randint(1, 100) + 100000
+    return uid
+
+  def __getattr__(self, name):
+    # Case for all "is..." magic properties (isMovement, ...)
+    if name.startswith('is'):
+      return 0
+    raise AttributeError, name
+
+  def getPath(self):
+    return '' # Whatever
+
+  def getRelativeUrl(self):
+    return '' # Whatever
+
+class FooDocument(IndexableDocument):
+  def getReference(self):
+    return 'foo'
+
+class BarDocument(IndexableDocument):
+  # Does not define any getReference method.
   pass
 
 class TestERP5Catalog(ERP5TypeTestCase, LogInterceptor):
@@ -3729,6 +3759,54 @@
     newSecurityManager(None, user)
     portal.view()
 
+  def test_IndexationContextIndependence(self, quiet=quiet, run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = 'Test that indexation is context-independent'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ',0,message)
+
+    # Create some dummy documents
+    def doCatalog(catalog, document):
+      catalog.catalogObjectList([document], check_uid=0)
+      result = catalog(select_expression='reference', uid=document.getUid())
+      self.assertEqual(len(result), 1)
+      return result[0].reference
+
+    portal = self.getPortalObject()
+    portal.foo = FooDocument()
+    portal.bar = BarDocument()
+    # Get instances, wrapping them in acquisition context implicitely.
+    foo = portal.foo
+    bar = portal.bar
+
+    self.assertTrue(getattr(foo, 'getReference', None) is not None)
+    self.assertTrue(getattr(bar, 'getReference', None) is None)
+
+    # Clean indexing
+    portal_catalog = portal.portal_catalog
+    self.assertEqual(doCatalog(portal_catalog, foo), 'foo')
+    self.assertEqual(doCatalog(portal_catalog, bar), None)
+
+    # Index an object wrapped in a "poisoned" acquisition chain
+    bar_on_foo = portal.foo.bar
+    self.assertTrue(getattr(bar_on_foo, 'getReference', None) is not None)
+    self.assertEqual(bar_on_foo.getReference(), 'foo')
+    self.assertEqual(doCatalog(portal_catalog, bar_on_foo), None)
+
+    # Index an object with catalog wrapped in a "poisoned" acquisition chain
+    portal_catalog_on_foo = portal.foo.portal_catalog
+    self.assertTrue(getattr(portal_catalog_on_foo, 'getReference', None) is not None)
+    self.assertEqual(portal_catalog_on_foo.getReference(), 'foo')
+    self.assertEqual(doCatalog(portal_catalog_on_foo, foo), 'foo')
+    self.assertEqual(doCatalog(portal_catalog_on_foo, bar), None)
+
+    # Poison everything
+    self.assertEqual(doCatalog(portal_catalog_on_foo, bar_on_foo), None)
+
+    delattr(portal, 'foo')
+    delattr(portal, 'bar')
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestERP5Catalog))




More information about the Erp5-report mailing list