diff --git a/product/ERP5Form/tests/testListBox.py b/product/ERP5Form/tests/testListBox.py index 23dfbe388f8ac6d9f274a47079bc732053d1898f..75174c4eb73a128fa29e029d5b8f313fef12d1c5 100644 --- a/product/ERP5Form/tests/testListBox.py +++ b/product/ERP5Form/tests/testListBox.py @@ -37,12 +37,25 @@ from Products.ERP5Type.tests.Sequence import SequenceList from Testing import ZopeTestCase from Products.ERP5Type.Utils import get_request from Products.ERP5Type.tests.utils import createZODBPythonScript +from ZPublisher.HTTPRequest import FileUpload +from StringIO import StringIO +from Products.ERP5Form.Selection import Selection + + +class DummyFieldStorage: + """A dummy FieldStorage to be wrapped in a FileUpload object. + """ + def __init__(self): + self.file = StringIO() + self.filename = '<dummy field storage>' + self.headers = {} class TestListBox(ERP5TypeTestCase): """ Test the API of ListBox. The user-visible aspect is tested by functional testing. """ + quiet = 1 run_all_test = 1 def getBusinessTemplateList(self): @@ -125,7 +138,7 @@ class TestListBox(ERP5TypeTestCase): self.assertEqual(key, result[i][0]) self.assertEqual(str(value).strip(), result[i][1]) - def test_01_CheckListBoxLinesWithStat(self, quiet=0, run=run_all_test): + def test_01_CheckListBoxLinesWithStat(self, quiet=quiet, run=run_all_test): if not run: return if not quiet: message = 'Test ListBoxLines With Statistics' @@ -142,7 +155,7 @@ class TestListBox(ERP5TypeTestCase): sequence_list.addSequenceString(sequence_string) sequence_list.play(self, quiet=quiet) - def test_02_DefaultSort(self, quiet=0, run=run_all_test): + def test_02_DefaultSort(self, quiet=quiet, run=run_all_test): """Defaults sort parameters must be passed to the list method, under the 'sort_on' key. """ @@ -174,7 +187,7 @@ return [] request['here'] = portal.foo_module listbox.get_value('default', render_format='list', REQUEST=request) - def test_03_DefaultParameters(self, quiet=0, run=run_all_test): + def test_03_DefaultParameters(self, quiet=quiet, run=run_all_test): """Defaults parameters are passed as keyword arguments to the list method """ portal = self.getPortal() @@ -204,22 +217,18 @@ return [] listbox.get_value('default', render_format='list', REQUEST=request) def test_04_UnicodeParameters(self, quiet=0, run=run_all_test): - """Defaults parameters are passed as keyword arguments to the list method + """Unicode properties are handled. """ portal = self.getPortal() portal.ListBoxZuite_reset() - # We create a script to use as a list method, in this script, we will check - # the default parameter. + # We create a script to use as a list method list_method_id = 'ListBox_ParametersListMethod' createZODBPythonScript( portal.portal_skins.custom, list_method_id, - 'selection=None, dummy_default_param=None, **kw', -""" -context = context.asContext(alternate_title = u'élisa') -return [context,] -""") + 'selection=None, **kw', + """return [context.asContext(alternate_title = u'\xe9lisa')]""") # set the listbox to use this as list method listbox = portal.FooModule_viewFooList.listbox @@ -227,11 +236,34 @@ return [context,] field_list_method = list_method_id, field_columns = ['alternate_title | Alternate Title',],) - # render the listbox, checks are done by list method itself request = get_request() request['here'] = portal.foo_module + try: + listbox.get_value('default', render_format='list', REQUEST=request) + except UnicodeError, e: + self.fail('Rendering failed: %s' % e) + + def test_05_EditSelectionWithFileUpload(self, quiet=quiet, run=run_all_test): + """Listbox edits selection with request parameters. Special care must be + taken for FileUpload objects that cannot be pickled, thus cannot be stored + in the ZODB. + """ + portal = self.getPortal() + portal.ListBoxZuite_reset() + listbox = portal.FooModule_viewFooList.listbox + # XXX isn't Selection automatically created ? + portal.portal_selections.setSelectionFor( + listbox.get_value('selection_name'), Selection()) + + request = get_request() + request['here'] = portal.foo_module + request.form['my_file_upload'] = FileUpload(DummyFieldStorage()) listbox.get_value('default', render_format='list', REQUEST=request) - + try: + get_transaction().commit() + except TypeError, e: + self.fail('Unable to commit transaction: %s' % e) + if __name__ == '__main__': framework() else: @@ -240,3 +272,4 @@ else: suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestListBox)) return suite +