A short bill about testing forms with files.
First you need to setup you environment using your site policy product then your
product to test. The function setUpDefaultMembersAndFolder create the
structure with access rights positioned. After that you can focus yourself on
Formula module test.
Test Formule creation process
=============================
For the test you need to create three Nomenclatures and two Validation Process.
First, some set-up:
>>> from Products.Five import zcml
>>> import Products
>>> import iw
>>> zcml.load_config('configure.zcml', package=iw.sitepolicy)
>>> zcml.load_config('configure.zcml', package=Products.Formula)
>>> from iw.sitepolicy.tests import utils
>>> utils.setUpDefaultMembersAndFolder(self)
>>> from Products.Five.testbrowser import Browser
>>> browser = Browser()
>>> browser.handleErrors = False
Let us log all exceptions, which is useful for debugging. Also, clear portlet
slots, to make the test browser less confused by things like the recent portlet
and the navtree.
>>> self.portal.error_log._ignored_exceptions = ()
>>> self.portal.left_slots = self.portal.right_slots = []
Import needed for testing file in forms
>>> import cStringIO
>>> portal_url = self.portal.absolute_url()
We will need of cStringIO to create fake files.
Now we will logon with an user and jump directly into working folder.
>>> browser.open('%s/logout' % portal_url)
>>> browser.open(portal_url + '/login_form')
>>> browser.getControl('Login Name').value = 'jdoe'
>>> browser.getControl('Password').value = 'secret'
>>> browser.getControl('Log in').click()
>>> 'John Doe' in browser.contents
True
>>> browser.open(self.formula_folder.absolute_url())
>>> browser.url
'.../formula...'
Verify that an author keeps modification and creation rights
>>> self.formula_folder.absolute_url()+'/edit' in browser.contents
True
>>> self.formula_folder.absolute_url()+'/createObject?type_name=BaseFormula' in browser.contents
True
self.formula_folder is set in setUpDefaultMembersAndFolder.
Now we can fill the form and test the result. Document’s id is the filename
prefixed by ‘formula_‘ and document’s title is the first file line.
Create a new Formula for with special pink flavor
>>> browser.getLink('Add Base Formula').click()
>>> 'portal_factory' in browser.url
True
>>> browser.getControl(name='special').value = u"pink flavor"
>>> browser.getControl(name='formula_file').add_file(cStringIO.StringIO('Pink flavor\n etc'), 'text/plain', "32048432.txt")
>>> browser.getControl('Save').click()
>>> 'Changes%20saved' in browser.url
True
>>> browser.getLink('View').click()
>>> '<h1>Pink flavor</h1>' in browser.contents
True
>>> print browser.url
http://nohost/plone/folder1/formula_folder/formula_32048432
If you want to do the same with Plone 2.5 - Zope 2.9 - you will have an error
because the ‘add_file‘ is not implemented on FileControl. You need to use
following code:
getControl(name='formula_file').mech_control.add_file





