diff --git a/product/ERP5Form/tests/testProxyField.py b/product/ERP5Form/tests/testProxyField.py index dbd7e312b08b365e532da0e2f05382e4bb03d2f8..a79b751a8b962708bddaeced3cc044f0e0640be9 100644 --- a/product/ERP5Form/tests/testProxyField.py +++ b/product/ERP5Form/tests/testProxyField.py @@ -54,6 +54,7 @@ class TestProxyField(ERP5TypeTestCase): field library """ portal_skins = self.getSkinsTool() + my_title_value = 'Generic Title' # Create an empty field library portal_skins.manage_addProduct['OFSP'].manage_addFolder('customized_geek') skin_folder = portal_skins._getOb('customized_geek') @@ -69,7 +70,7 @@ class TestProxyField(ERP5TypeTestCase): 'Base_viewGeekFieldLibrary', 'View') form = skin_folder._getOb('Base_viewGeekFieldLibrary', None) - form.manage_addField('my_title', 'Generic Title', 'StringField') + form.manage_addField('my_title', my_title_value, 'StringField') # Custom field library has to have an higher priority selection = portal_skins.getSkinPath('View') @@ -85,11 +86,17 @@ class TestProxyField(ERP5TypeTestCase): 'View') form = skin_folder._getOb('Base_viewGeek', None) form.manage_addField('my_title', 'Title', 'ProxyField') - field = getattr(form, 'my_title') + field = form._getOb('my_title') field.manage_edit_xmlrpc(dict( form_id='Base_viewGeekFieldLibrary', field_id='my_title')) - self.assertEquals('Generic Title', field.get_value('title')) + self.assertEquals(my_title_value, field.get_value('title')) + + # Reveal a bug, causes infinite loop when ProxyField.getTemplateField + # returns the proxyfield itself. + # This is caused by the acquisition context + self.assertRaises(KeyError, self.portal.portal_skins.custom.Base_viewGeek.\ + my_title.Base_viewGeekFieldLibrary.my_title.get_value, 'ANYTHING_WHICH_RAISES_KEY_ERROR') def testPathOfTemplateField(self): """ @@ -187,3 +194,63 @@ class TestProxyField(ERP5TypeTestCase): self.assertEquals('Generic Title', field.get_value('title')) self.changeSkin('CustomizedView') self.assertEquals('Customized Title', field.get_value('title')) + + def testEmptySurchargedFieldLibrary_acquisition(self): + """ + This test checks that it is not required to duplicate all fields in a custom + field library, and field is well return in portal acquisition context + """ + portal_skins = self.getSkinsTool() + my_title_value = 'Generic Title' + # Create an empty field library + portal_skins.manage_addProduct['OFSP'].manage_addFolder('customized_geek') + skin_folder = portal_skins._getOb('customized_geek') + skin_folder.manage_addProduct['ERP5Form'].addERP5Form( + 'Base_viewGeekFieldLibrary', + 'View') + form = skin_folder._getOb('Base_viewGeekFieldLibrary', None) + + # Create the default field library with a template field + portal_skins.manage_addProduct['OFSP'].manage_addFolder('erp5_geek') + skin_folder = portal_skins._getOb('erp5_geek') + skin_folder.manage_addProduct['ERP5Form'].addERP5Form( + 'Base_viewGeekFieldLibrary', + 'View') + form = skin_folder._getOb('Base_viewGeekFieldLibrary', None) + form.manage_addField('my_title', my_title_value, 'StringField') + + # Custom field library has to have an higher priority + selection = portal_skins.getSkinPath('View') + selection = selection.split(',') + selection.append('customized_geek') + selection.append('erp5_geek') + portal_skins.manage_skinLayers(skinpath=tuple(selection), + skinname='View', add_skin=1) + portal_skins.getPortalObject().changeSkin(None) + + skin_folder = portal_skins._getOb('custom') + skin_folder.manage_addProduct['ERP5Form'].addERP5Form('Base_viewGeek', + 'View') + form = skin_folder._getOb('Base_viewGeek', None) + form.manage_addField('my_title', 'Title', 'ProxyField') + field = form._getOb('my_title') + field.manage_edit_xmlrpc(dict( + form_id='Base_viewGeekFieldLibrary', field_id='my_title')) + + # Check that acquisition wrapper fits + # restricted environment requirements. + # If object returned is not wrapped in portal context, + # current user is not Found in current context + # then Unauthorized Exception is raised. + python_script_id = "ERP5Site_testAccessProxyFieldProperty" + python_script_parameter = "proxy_field" + python_script_body = """ +print proxy_field.getRecursiveTemplateField().meta_type +return printed +""" + skin_folder.manage_addProduct['PythonScripts'].manage_addPythonScript( + id=python_script_id) + python_script_object = skin_folder._getOb(python_script_id) + python_script_object.ZPythonScript_edit(python_script_parameter, + python_script_body) + python_script_object(field)