Commit 7a03b5ee authored by Nicolas Delaby's avatar Nicolas Delaby

Fix tester accessor generation for acquired properties

Tester accessors was not generated for acquired properties,
only content accessor was generated.

Extend test to prove the fix.
parent 5be21a28
......@@ -276,7 +276,7 @@ class Tester(Method):
func_defaults = ()
def __init__(self, id, key, property_type, acquired_property,
storage_id=None):
portal_type=None, storage_id=None):
self._id = id
self.__name__ = id
self._key = key
......@@ -284,9 +284,19 @@ class Tester(Method):
self._null = type_definition[property_type]['null']
if storage_id is None:
storage_id = "%s%s" % (ATTRIBUTE_PREFIX, key)
self._storage_id = storage_id
elif type(storage_id) is not list:
storage_id = [storage_id]
self._storage_id_list = storage_id
if type(portal_type) is str:
portal_type = (portal_type,)
self._portal_type = portal_type
self._acquired_property = acquired_property
def __call__(self, instance, *args, **kw):
return getattr(instance, self._storage_id, None) is not None
o = None
for k in self._storage_id_list:
o = getattr(instance, k, None)
if o is not None and o.portal_type in self._portal_type:
return o.hasProperty(self._acquired_property)
return False
......@@ -314,10 +314,11 @@ class AcquiredProperty(StandardProperty):
if property_dict['elementary_type'] == 'content':
argument_list = (property_dict['elementary_type'],
property_dict['storage_id'])
cls._applyDefinitionFormatDictOnAccessorHolder(
property_dict['reference'], cls._content_type_tester_definition_dict,
accessor_holder, argument_list, property_dict['read_permission'])
reference = property_dict['reference']
for composed_id in (reference, 'default_' + reference,):
cls._applyDefinitionFormatDictOnAccessorHolder(
composed_id, cls._content_type_tester_definition_dict,
accessor_holder, argument_list, property_dict['read_permission'])
else:
super(AcquiredProperty, cls)._applyTesterDefinitionDictOnAccessorHolder(
......@@ -484,6 +485,10 @@ class AcquiredProperty(StandardProperty):
'_set%s': ContentProperty.Setter
}
_content_type_acquired_property_id_tester_definition_dict = {
'has%s': ContentProperty.Tester
}
@classmethod
def _applyContentTypeAcquiredPropertyOnAccessorHolder(cls,
aq_id,
......@@ -515,6 +520,13 @@ class AcquiredProperty(StandardProperty):
acquired_property_id_argument_list,
property_dict['write_permission'])
cls._applyDefinitionFormatDictOnAccessorHolder(
composed_id,
cls._content_type_acquired_property_id_tester_definition_dict,
accessor_holder,
acquired_property_id_argument_list,
property_dict['read_permission'])
cls._applyDefinitionFormatDictOnAccessorHolder(
composed_id + '_list',
cls._content_type_acquired_property_id_getter_definition_dict,
......@@ -529,6 +541,13 @@ class AcquiredProperty(StandardProperty):
acquired_property_id_list_argument_list,
property_dict['write_permission'])
cls._applyDefinitionFormatDictOnAccessorHolder(
composed_id + '_list',
cls._content_type_acquired_property_id_tester_definition_dict,
accessor_holder,
acquired_property_id_argument_list,
property_dict['read_permission'])
@classmethod
def applyDefinitionOnAccessorHolder(cls,
property_dict,
......@@ -541,7 +560,7 @@ class AcquiredProperty(StandardProperty):
portal)
if property_dict['elementary_type'] == 'content':
if property_dict['acquisition_base_category'] is not None:
if property_dict['acquisition_base_category']:
apply_method = cls._applyAcquisitionBaseCategoryAcquiredPropertyOnAccessorHolder
else:
apply_method = cls._applyContentTypeAcquiredPropertyOnAccessorHolder
......
......@@ -1059,8 +1059,14 @@ class TestERP5Type(PropertySheetTestCase, LogInterceptor):
'organisation',
**self.DEFAULT_ORGANISATION_TITLE_PROP)
person = self.getPersonModule().newContent(id='1', portal_type='Person')
self.assertTrue(hasattr(person, 'getDefaultOrganisationTitle'))
self.assertTrue(hasattr(person, 'setDefaultOrganisationTitle'))
self.assertTrue(getattr(person, 'getDefaultOrganisationTitle'))
self.assertTrue(getattr(person, 'setDefaultOrganisationTitle'))
self.assertTrue(getattr(person, 'hasDefaultOrganisationTitle'))
self.assertTrue(getattr(person, 'hasOrganisationTitle'))
self.assertFalse(person.hasDefaultOrganisation())
self.assertFalse(person.hasOrganisation())
self.assertFalse(person.hasDefaultOrganisationTitle())
self.assertFalse(person.hasOrganisationTitle())
person.setDefaultOrganisationTitle('The organisation title')
# XXX content generated properties are not in propertyMap. is it a bug ?
#self.assertTrue(person.hasProperty('default_organisation_title'))
......@@ -1072,7 +1078,10 @@ class TestERP5Type(PropertySheetTestCase, LogInterceptor):
default_organisation.getPortalTypeName())
self.assertEquals('The organisation title',
default_organisation.getTitle())
self.assertTrue(person.hasDefaultOrganisation())
self.assertTrue(person.hasOrganisation())
self.assertTrue(person.hasDefaultOrganisationTitle())
self.assertTrue(person.hasOrganisationTitle())
# make sure this new organisation is indexed
transaction.commit()
self.assertEquals(1, len([m for m in
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment