[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