[Erp5-report] r43982 arnaud.fontaine - in /erp5/trunk/products/ERP5Type: dynamic/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 4 15:36:38 CET 2011


Author: arnaud.fontaine
Date: Fri Mar  4 15:36:38 2011
New Revision: 43982

URL: http://svn.erp5.org?rev=43982&view=rev
Log:
Upon resetting, delete constraints and _categories attributes on
accessor holders before deleting the class itself because a reference
on the class will still be kept as bases of erp5.portal_type, thus
this ensures that erp5.portal_type.Foo will be 'unghost' when
accessing constraints and _categories.

Also, move testInstanceBaseCategoryList to TestPortalTypeClass as the
issue is initially specific to portal type class.

Modified:
    erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py
    erp5/trunk/products/ERP5Type/tests/testDynamicClassGeneration.py
    erp5/trunk/products/ERP5Type/tests/testERP5Type.py

Modified: erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py?rev=43982&r1=43981&r2=43982&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/dynamic/accessor_holder.py [utf8] Fri Mar  4 15:36:38 2011
@@ -99,6 +99,18 @@ class AccessorHolderModuleType(ModuleTyp
     """
     for klass in self.__dict__.values():
       if isinstance(klass, AccessorHolderType):
+        # Delete these attributes (computed on the portal type class
+        # from its accessor holder) before deleting the class itself
+        # because a reference on the class will still be kept as bases
+        # of erp5.portal_type, thus this ensures that
+        # erp5.portal_type.Foo will be 'unghost' thanks to
+        # PortalTypeMetaClass.__getattr__
+        for attribute in ('constraints', '_categories'):
+          try:
+            delattr(klass, attribute)
+          except AttributeError:
+            pass
+
         delattr(self, klass.__name__)
 
 def _generateBaseAccessorHolder(portal):

Modified: erp5/trunk/products/ERP5Type/tests/testDynamicClassGeneration.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testDynamicClassGeneration.py?rev=43982&r1=43981&r2=43982&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testDynamicClassGeneration.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/testDynamicClassGeneration.py [utf8] Fri Mar  4 15:36:38 2011
@@ -270,6 +270,32 @@ class TestPortalTypeClass(ERP5TypeTestCa
     module_class.loadClass()
     self.assertFalse(issubclass(module_class, Folder))
 
+  def testAttributeValueComputedFromAccessorHolderList(self):
+    """
+    Check that attributes such as constraints and _categories,
+    containing respectively all the constraints and categories define
+    on their Property Sheets, loads the portal type class as some
+    static getters (for example getInstanceBaseCategoryList() use
+    _categories directly)
+    """
+    import erp5.portal_type
+
+    synchronizeDynamicModules(self.portal, force=True)
+    self.assertTrue(erp5.portal_type.Person.__isghost__)
+    self.assertTrue('constraints' not in erp5.portal_type.Person.__dict__)
+
+    getattr(erp5.portal_type.Person, 'constraints')
+    self.assertTrue(not erp5.portal_type.Person.__isghost__)
+    self.assertTrue('constraints' in erp5.portal_type.Person.__dict__)
+
+    synchronizeDynamicModules(self.portal, force=True)
+    self.assertTrue(erp5.portal_type.Person.__isghost__)
+    self.assertTrue('_categories' not in erp5.portal_type.Person.__dict__)
+
+    getattr(erp5.portal_type.Person, '_categories')
+    self.assertTrue(not erp5.portal_type.Person.__isghost__)
+    self.assertTrue('_categories' in erp5.portal_type.Person.__dict__)
+
 class TestZodbPropertySheet(ERP5TypeTestCase):
   """
   XXX: WORK IN PROGRESS

Modified: erp5/trunk/products/ERP5Type/tests/testERP5Type.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testERP5Type.py?rev=43982&r1=43981&r2=43982&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testERP5Type.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/testERP5Type.py [utf8] Fri Mar  4 15:36:38 2011
@@ -3075,24 +3075,6 @@ class TestERP5Type(PropertySheetTestCase
         property_id_dict[property_id] = 1
       self.assertEqual([], non_unique_property_id_list)
 
-class TestInstanceBaseCategoryList(ERP5TypeTestCase):
-  def getBusinessTemplateList(self):
-    return 'erp5_base',
-
-  def test_getInstanceBaseCategoryList(self):
-    portal = self.getPortalObject()
-    person_portal_type = self.portal.portal_types['Person']
-    person_category_list = person_portal_type.getInstanceBaseCategoryList()
-    self.assertNotEqual([], list(person_category_list))
-
-  def test_getInstanceBaseCategoryList_afterReset(self):
-    self.getTypesTool().resetDynamicDocumentsOnceAtTransactionBoundary()
-    transaction.commit()
-    portal = self.getPortalObject()
-    person_portal_type = self.portal.portal_types['Person']
-    person_category_list = person_portal_type.getInstanceBaseCategoryList()
-    self.assertNotEqual([], list(person_category_list))
-
 class TestAccessControl(ERP5TypeTestCase):
   # Isolate test in a dedicaced class in order not to break other tests
   # when this one fails.



More information about the Erp5-report mailing list