[Erp5-report] r10031 - in /erp5/trunk/products/ERP5Type: Accessor/ tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Sun Sep 17 13:17:58 CEST 2006
Author: jp
Date: Sun Sep 17 13:17:56 2006
New Revision: 10031
URL: http://svn.erp5.org?rev=10031&view=rev
Log:
Added test for List accessors
Modified:
erp5/trunk/products/ERP5Type/Accessor/List.py
erp5/trunk/products/ERP5Type/tests/testERP5Type.py
Modified: erp5/trunk/products/ERP5Type/Accessor/List.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Accessor/List.py?rev=10031&r1=10030&r2=10031&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Accessor/List.py (original)
+++ erp5/trunk/products/ERP5Type/Accessor/List.py Sun Sep 17 13:17:56 2006
@@ -72,38 +72,28 @@
if not self._reindex:
# Modify the property
if self._is_tales_type:
- if value in self._null:
- value = None
- setattr(instance, self._storage_id, value)
+ setattr(instance, self._storage_id, str(value))
elif value in self._null:
# The value has no default property -> it is empty
setattr(instance, self._storage_id, ())
else:
- value = self._cast(args[0])
if self._item_cast is not identity:
- value = map(self._item_cast, value)
- if len(value) > 0:
- default_value = value[0]
- list_value = getattr(instance, self._storage_id, None)
- if list_value is None: list_value = []
- new_list_value = [default_value]
- keep_value = 0
- for k in list_value:
- # Only delete the first occurence if exists
- if keep_value or k is not default_value:
- new_list_value += [k]
- keep_value = 1
- else:
- # The list has no default property -> it is empty
- new_list_value = []
- setattr(instance, self._storage_id, tuple(new_list_value))
+ value = self._item_cast(value)
+ default_value = value
+ list_value = getattr(instance, self._storage_id, None)
+ if list_value is None: list_value = []
+ my_dict = dict([(x, 0) for x in list_value if x != default_value])
+ new_list_value = my_dict.keys()
+ new_list_value.insert(0, default_value)
+ value = new_list_value
+ setattr(instance, self._storage_id, tuple(value))
else:
# Call the private setter
method = getattr(instance, '_' + self._id)
method(*args, **kw)
if self._reindex: instance.reindexObject()
-class Setter(DefaultSetter):
+class ListSetter(DefaultSetter):
def __call__(self, instance, *args, **kw):
value = args[0]
@@ -125,8 +115,7 @@
if self._reindex: instance.reindexObject()
-ListSetter = Setter
-
+Setter = ListSetter
class SetSetter(Method):
"""
@@ -166,11 +155,8 @@
if not self._reindex:
# Modify the property
if self._is_tales_type:
- if value in self._null:
- value = None
- setattr(instance, self._storage_id, value)
+ setattr(instance, self._storage_id, str(value))
elif value in self._null:
- # The value has no default property -> it is empty
setattr(instance, self._storage_id, ())
else:
value = self._cast(args[0])
@@ -179,27 +165,9 @@
if len(value) > 0:
list_value = getattr(instance, self._storage_id, None)
if list_value is None: list_value = []
-
-
-
-# if len(list_value) > 0:
-# my_dict = {}
-# default_value = list_value[0]
-# for v in value:
-# my_dict[v] = 0
-# if my_dict.has_key(default_value):
-# del my_dict[default_value]
-# # If we change the set, the default value must be in the new set
-# if default_value in value:
-# new_list_value = [default_value] + my_dict.keys()
-# else:
-# new_list_value = my_dict.keys()
-# else:
-# new_list_value = value
-
if len(list_value) > 0:
default_value = list_value[0]
- my_dict = dict([(x, 0) for x in value if x!=default_value])
+ my_dict = dict([(x, 0) for x in value if x != default_value])
new_list_value = my_dict.keys()
# If we change the set,
# the default value must be in the new set
@@ -207,7 +175,6 @@
new_list_value.insert(0, default_value)
else:
new_list_value = value
-
else:
# The list has no default property -> it is empty
new_list_value = []
@@ -300,7 +267,7 @@
if self._is_tales_type:
if kw.get('evaluate', 1):
if type(list_value) != type(''):
- LOG('ListGetter', 0, 'instance = %r, self._storage_id = %r, list_value = %r' % (instance, self._storage_id, list_value,))
+ LOG('ListGetter', 0, 'instance = %r, self._storage_id = %r, list_value = %r' % (instance, self._storage_id, list_value,)) # If we reach this point, something strange is going on
list_value = evaluateTales(instance=instance, value=list_value)
else:
return list_value
Modified: erp5/trunk/products/ERP5Type/tests/testERP5Type.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testERP5Type.py?rev=10031&r1=10030&r2=10031&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testERP5Type.py (original)
+++ erp5/trunk/products/ERP5Type/tests/testERP5Type.py Sun Sep 17 13:17:56 2006
@@ -161,6 +161,12 @@
getRegionRelatedValueList
getRegionRelatedIdList
getRegionRelatedTitleList
+
+ This tests also makes sure that the related accessors are
+ compatible with acquisition of category. Although region
+ is not defined on a Person, Person documents are member
+ of a region and should thus be accessible from the region
+ category through getRegionRelated accessors
"""
if not run: return
portal = self.getPortal()
@@ -235,15 +241,36 @@
checkRelationUnset(self)
def test_05_setProperty(self, quiet=quiet, run=run_all_test):
+ """
+ In this test we create a subobject (ie. a phone number)
+ and show the difference between calling getProperty and
+ an accessor.
+
+ Accessors can be acquired thus returning a property value
+ defined on a parent object whereas getProperty / setProperty
+ always act at the level of the object itself.
+
+ We also do some basic tests on the telephone number parser
+
+ XXX I think this is inconsistent because it prevents from
+ using getProperty / setProperty as a generic way to use
+ accessors from subobjects.
+ """
if not run: return
portal = self.getPortal()
module = self.getOrganisationModule()
organisation = module.newContent(id='1', portal_type='Organisation')
- organisation.setDefaultTelephoneText('55 55 5555')
+ organisation.setDefaultTelephoneText('+55(0)66-5555')
+ self.assertEquals(organisation.default_telephone.getTelephoneCountry(),'55')
+ self.assertEquals(organisation.default_telephone.getTelephoneArea(),'66')
+ self.assertEquals(organisation.default_telephone.getTelephoneNumber(),'5555')
organisation.setCorporateName('Nexedi')
+ #self.assertEquals(organisation.default_telephone.getProperty('corporate_name'),'Nexedi') # Who is right ? XXX
organisation.default_telephone.setProperty('corporate_name','Toto')
self.assertEquals(organisation.corporate_name,'Nexedi')
+ self.assertEquals(organisation.default_telephone.getCorporateName(),'Nexedi')
self.assertEquals(organisation.default_telephone.corporate_name,'Toto')
+ self.assertEquals(organisation.default_telephone.getProperty('corporate_name'),'Toto')
def test_06_CachingMethod(self, quiet=quiet, run=run_all_test):
"""Tests Caching methods."""
@@ -337,8 +364,9 @@
def test_09_RenameObjects(self, quiet=quiet, run=run_all_test):
"""Test object renaming.
- As we overloaded some parts of OFS, it's better to test again some basic
- features.
+
+ As we overloaded some parts of OFS, it's better to test again some basic
+ features.
"""
if not run: return
folder = self.getOrganisationModule()
@@ -361,7 +389,52 @@
new_id = '%s_new' % id_
self.assertEquals(folder._getOb(new_id).getId(), new_id)
- def test_10_valueAccessor(self, quiet=quiet, run=run_all_test):
+ def test_10_ConstraintNotFound(self, quiet=quiet, run=run_all_test):
+ """
+ When a Constraint is not found while importing a PropertySheet, AttributeError
+ was raised, and generated a infinite loop.
+ This is a test to make sure this will not happens any more
+ """
+ if not run: return
+ # We will first define a new propertysheet
+ class_tool = self.getClassTool()
+
+ class_tool.newPropertySheet('TestPropertySheet')
+ text = """
+class TestPropertySheet:
+ \"\"\"
+ TestPropertySheet for this unit test
+ \"\"\"
+
+ _properties = (
+ { 'id' : 'strange_property',
+ 'description' : 'A local property description',
+ 'type' : 'string',
+ 'mode' : '' },
+ )
+
+ _constraints = (
+ { 'id' : 'toto',
+ 'description' : 'define a bad constraint',
+ 'type' : 'TestConstraintNotFoundClass',
+ },
+ )
+
+"""
+ class_tool.editPropertySheet('TestPropertySheet',text)
+ class_tool.importPropertySheet('TestPropertySheet')
+ # We set the property sheet on the portal type Organisation
+ type_tool = self.getTypeTool()
+ organisation_portal_type = type_tool['Organisation']
+ organisation_portal_type.setPropertySheetList(['TestPropertySheet'])
+ folder = self.getOrganisationModule()
+ _aq_reset()
+ # We check that we raise exception when we create new object
+ from Products.ERP5Type.Utils import ConstraintNotFound
+ organisation = self.assertRaises(ConstraintNotFound,folder.newContent,
+ portal_type='Organisation')
+
+ def test_11_valueAccessor(self, quiet=quiet, run=run_all_test):
"""
The purpose of this test is to make sure that category accessors
work as expected.
@@ -374,8 +447,6 @@
The test is implemented for both Category and Value
accessors.
- The same test must be done for category accessors
- for list accessors and for acquired property accessors
"""
if not run: return
@@ -401,6 +472,7 @@
self.assertEquals(alpha.getRelativeUrl(), 'region/alpha')
+ #get_transaction().commit()
alpha.immediateReindexObject()
beta.immediateReindexObject()
zeta.immediateReindexObject()
@@ -488,51 +560,74 @@
self.assertEquals(result, ['alpha', 'beta'])
self.assertEquals(person.getRegionList(), ['alpha', 'beta'])
- def test_11_ConstraintNotFound(self, quiet=quiet, run=run_all_test):
- """
- When a Constraint is not found while importing a PropertySheet, AttributeError
- was raised, and generated a infinite loop.
- This is a test to make sure this will not happens any more
- """
- if not run: return
- # We will first define a new propertysheet
- class_tool = self.getClassTool()
-
- class_tool.newPropertySheet('TestPropertySheet')
- text = """
-class TestPropertySheet:
- \"\"\"
- TestPropertySheet for this unit test
- \"\"\"
-
- _properties = (
- { 'id' : 'strange_property',
- 'description' : 'A local property description',
- 'type' : 'string',
- 'mode' : '' },
- )
-
- _constraints = (
- { 'id' : 'toto',
- 'description' : 'define a bad constraint',
- 'type' : 'TestConstraintNotFoundClass',
- },
- )
-
-"""
- class_tool.editPropertySheet('TestPropertySheet',text)
- class_tool.importPropertySheet('TestPropertySheet')
- # We set the property sheet on the portal type Organisation
- type_tool = self.getTypeTool()
- organisation_portal_type = type_tool['Organisation']
- organisation_portal_type.setPropertySheetList(['TestPropertySheet'])
- folder = self.getOrganisationModule()
- _aq_reset()
- # We check that we raise exception when we create new object
- from Products.ERP5Type.Utils import ConstraintNotFound
- organisation = self.assertRaises(ConstraintNotFound,folder.newContent,
- portal_type='Organisation')
-
+ def test_12_listAccessor(self, quiet=quiet, run=run_all_test):
+ """
+ The purpose of this test is to make sure that accessor for
+ sequence types support the same kind of semantics as the
+ one on categories. We use 'subject' of the DublinCore propertysheet
+ on organisation documents for this test.
+ """
+ if not run: return
+
+ if not quiet:
+ message = 'Test Category setters'
+ ZopeTestCase._print('\n '+message)
+ LOG('Testing... ', 0, message)
+
+ # Create a new person
+ module = self.getPersonModule()
+ person = module.newContent(portal_type='Person')
+
+ # Do the same tests as in test_11_valueAccessor
+ person.setSubject('alpha')
+ self.assertEquals(person.getSubject(), 'alpha')
+ person.setSubjectList(['alpha', 'alpha'])
+ self.assertEquals(person.getSubjectList(), ['alpha', 'alpha'])
+ person.setSubjectSet(['alpha', 'alpha'])
+ self.assertEquals(person.getSubjectSet(), ['alpha'])
+ person.setSubjectList(['alpha', 'beta', 'alpha'])
+ self.assertEquals(person.getSubjectList(), ['alpha', 'beta', 'alpha'])
+ person.setSubjectSet(['alpha', 'beta', 'alpha'])
+ result = person.getSubjectSet()
+ result.sort()
+ self.assertEquals(result, ['alpha', 'beta'])
+ person.setDefaultSubject('beta')
+ self.assertEquals(person.getDefaultSubject(), 'beta')
+ result = person.getSubjectSet()
+ result.sort()
+ self.assertEquals(result, ['alpha', 'beta'])
+ self.assertEquals(person.getSubjectList(), ['beta', 'alpha'])
+ person.setDefaultSubject('alpha')
+ self.assertEquals(person.getDefaultSubject(), 'alpha')
+ result = person.getSubjectSet()
+ result.sort()
+ self.assertEquals(result, ['alpha', 'beta'])
+ self.assertEquals(person.getSubjectList(), ['alpha', 'beta'])
+
+ def test_13_acquiredAccessor(self, quiet=quiet, run=run_all_test):
+ """
+ The purpose of this test is to make sure that accessor for
+ sequence types support the same kind of semantics as the
+ one on categories. We use 'subject' of the DublinCore propertysheet
+ on organisation documents for this test.
+ """
+
+ # If address is updated on subordination, then
+ # address is updated on person
+
+ # If address is changed on person, it rem
+
+ # If address not available on one organisation
+ # it is found on the mapping related organisation
+ # which is one step higher in the site
+ pass
+
+ def test_14_bangAccessor(self, quiet=quiet, run=run_all_test):
+ """
+ Bang accesors must be triggered each time another accessor is called
+ They are useful for centralising events ?
+ """
+ pass
if __name__ == '__main__':
More information about the Erp5-report
mailing list