import unittest import os.path import email from zope.interface import classProvides, implements import transaction from Products.Five import zcml from Products.Five import fiveconfigure from Testing import ZopeTestCase as ztc from Products.PloneTestCase import PloneTestCase as ptc from Products.PloneTestCase.layer import onsetup from collective.transmogrifier.interfaces import ISectionBlueprint, ISection, ITransmogrifier class Source(object): classProvides(ISectionBlueprint) implements(ISection) def __init__(self, transmogrifier, name, options, previous): self.previous = previous def __iter__(self): for item in self.previous: yield item fname = os.path.join(os.path.dirname(__file__), 'complex_form.xml') xml = file(fname).read() item = dict( _type='PloneFormMailer', _path='complex-form', _files=dict( marshall=dict( name='.marshall.xml', data=xml ) ) ) yield item fname = os.path.join(os.path.dirname(__file__), 'fieldset_form.xml') xml = file(fname).read() item = dict( _type='PloneFormMailer', _path='fieldset-form', _files=dict( marshall=dict( name='.marshall.xml', data=xml ) ) ) yield item ztc.installProduct('PloneFormGen') @onsetup def setup_product(): fiveconfigure.debug_mode = True import quintagroup.transmogrify.pfm2pfg zcml.load_config('configure.zcml', quintagroup.transmogrify.pfm2pfg) import quintagroup.transmogrify.pfm2pfg.tests zcml.load_config('test_import.zcml', quintagroup.transmogrify.pfm2pfg.tests) fiveconfigure.debug_mode = False setup_product() ptc.setupPloneSite(products=['PloneFormGen']) class TestImport(ptc.PloneTestCase): """ Test importing of PloneFormGen content. """ def afterSetUp(self): if 'complex-form' not in self.portal: # run transmogrifier pipeline transmogrifier = ITransmogrifier(self.portal) transmogrifier('test_import') def beforeTearDown(self): transaction.commit() def test_form_folder(self): self.failUnless('complex-form' in self.portal) form = self.portal['complex-form'] self.assertEqual(form['title'], 'Test form') self.assertEqual(form.getFormPrologue(), '

form prologue

') self.assertEqual(form.getFormEpilogue(), '

form epilogue

') self.assertEqual(form['thanksPageOverride'], 'redirect_to:string:test') self.assertEqual(form['afterValidationOverride'], 'string:script') def test_mailer(self): form = self.portal['complex-form'] self.failUnless('mailer' in form) mailer = form['mailer'] self.assertEqual(mailer['subjectOverride'], 'string:Test form submit') self.assertEqual(mailer['recipient_name'], 'Test') self.assertEqual(mailer['recipientOverride'], 'string:recipient@mail.org') self.assertEqual(mailer['additional_headers'], ('Header1: value1', 'Header2: value2')) self.assertEqual(mailer['body_type'], 'html') self.assertEqual(mailer.getBody_pre(), 'Next are input fields') self.assertEqual(mailer.getBody_post(), 'You have filled all necessary fields') self.assertEqual(mailer.getBody_footer(), 'It\'s built on Plone') self.assertEqual(mailer['cc_recipients'], ('cc1@mail.org', 'cc2@mail.org')) self.assertEqual(mailer['bcc_recipients'], ('bcc1@mail.org', 'bcc2@mail.org')) self.assertEqual(mailer.created(), form.created()) self.assertEqual(mailer.modified(), form.modified()) def test_thanks_page(self): form = self.portal['complex-form'] self.failUnless('thank-you' in form) page = form['thank-you'] self.assertEqual(page.Title(), 'The form was sent.') self.assertEqual(page.getThanksPrologue(), '

Thank you for submiting it.

') self.assertEqual(page.created(), form.created()) self.assertEqual(page.modified(), form.modified()) def test_string_field(self): form = self.portal['complex-form'] self.failIf('field1' not in form) field = form['field1'] self.assertEqual(field.getPortalTypeName(), 'FormStringField') self.assertEqual(field['title'], 'String field') self.assertEqual(field.Description(), 'field description') self.assertEqual(field['required'], True) self.assertEqual(field['hidden'], False) self.assertEqual(field['fgDefault'], '') self.assertEqual(field['fgmaxlength'], 255) self.assertEqual(field['fgsize'], 20) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_email_field(self): form = self.portal['complex-form'] self.failIf('field2' not in form) field = form['field2'] self.assertEqual(field.getPortalTypeName(), 'FormStringField') self.assertEqual(field['title'], 'Email field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['hidden'], False) self.assertEqual(field['fgDefault'], 'test@mail.com') self.assertEqual(field['fgmaxlength'], 255) self.assertEqual(field['fgsize'], 20) self.assertEqual(field['fgStringValidator'], 'isEmail') self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_link_field(self): form = self.portal['complex-form'] self.failIf('field3' not in form) field = form['field3'] self.assertEqual(field.getPortalTypeName(), 'FormStringField') self.assertEqual(field['title'], 'Link field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], False) self.assertEqual(field['hidden'], False) self.assertEqual(field['fgDefault'], '') self.assertEqual(field['fgmaxlength'], 15) self.assertEqual(field['fgsize'], 20) self.assertEqual(field['fgStringValidator'], 'isURL') self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_pattern_field(self): form = self.portal['complex-form'] self.failIf('field4' not in form) field = form['field4'] self.assertEqual(field.getPortalTypeName(), 'FormStringField') self.assertEqual(field['title'], 'Pattern field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['hidden'], True) self.assertEqual(field['fgDefault'], '') self.assertEqual(field['fgmaxlength'], 255) self.assertEqual(field['fgsize'], 20) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_textarea_field(self): form = self.portal['complex-form'] self.failIf('field5' not in form) field = form['field5'] self.assertEqual(field.getPortalTypeName(), 'FormTextField') self.assertEqual(field['title'], 'Text area field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['hidden'], False) self.assertEqual(field.getFgDefault(), '') self.assertEqual(field['fgmaxlength'], 1000) self.assertEqual(field['fgRows'], 5) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_rawtextarea_field(self): form = self.portal['complex-form'] self.failIf('field6' not in form) field = form['field6'] self.assertEqual(field.getPortalTypeName(), 'FormTextField') self.assertEqual(field['title'], 'Raw text area field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['hidden'], False) self.assertEqual(field.getFgDefault(), '') self.assertEqual(field['fgmaxlength'], '0') self.assertEqual(field['fgRows'], 5) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_password_field(self): form = self.portal['complex-form'] self.failIf('field7' not in form) field = form['field7'] self.assertEqual(field.getPortalTypeName(), 'FormPasswordField') self.assertEqual(field['title'], 'Password field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['fgDefault'], '') self.assertEqual(field['fgmaxlength'], 255) self.assertEqual(field['fgsize'], 20) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_label_field(self): form = self.portal['complex-form'] self.failIf('field8' not in form) field = form['field8'] self.assertEqual(field.getPortalTypeName(), 'FormRichLabelField') self.assertEqual(field['title'], 'Label field') self.assertEqual(field.Description(), '') self.assertEqual(field['fgDefault'], 'label text') self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_integer_field(self): form = self.portal['complex-form'] self.failIf('field9' not in form) field = form['field9'] self.assertEqual(field.getPortalTypeName(), 'FormIntegerField') self.assertEqual(field['title'], 'Integer field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['fgDefault'], '55') self.assertEqual(field['fgmaxlength'], 40) self.assertEqual(field['fgsize'], 20) self.assertEqual(field['minval'], 10) self.assertEqual(field['maxval'], 1000) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_float_field(self): form = self.portal['complex-form'] self.failIf('field10' not in form) field = form['field10'] self.assertEqual(field.getPortalTypeName(), 'FormFixedPointField') self.assertEqual(field['title'], 'Float field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['fgDefault'], '') self.assertEqual(field['fgmaxlength'], 10) self.assertEqual(field['fgsize'], 20) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_datetime_field(self): form = self.portal['complex-form'] self.failIf('field11' not in form) field = form['field11'] self.assertEqual(field.getPortalTypeName(), 'FormDateField') self.assertEqual(field['title'], 'Date time field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['fgDefault'], '2008/10/10 10:10:00 GMT+3') self.assertEqual(field['fgStartingYear'], 2006) self.assertEqual(field['fgEndingYear'], 2010) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_file_field(self): form = self.portal['complex-form'] self.failIf('field12' not in form) field = form['field12'] self.assertEqual(field.getPortalTypeName(), 'FormFileField') self.assertEqual(field['title'], 'File field') self.assertEqual(field.Description(), '') self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_lines_field(self): form = self.portal['complex-form'] self.failIf('field13' not in form) field = form['field13'] self.assertEqual(field.getPortalTypeName(), 'FormLinesField') self.assertEqual(field['title'], 'Lines field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['fgDefault'], ('first', 'second', 'third')) self.assertEqual(field['fgRows'], 5) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_checkbox_field(self): form = self.portal['complex-form'] self.failIf('field14' not in form) field = form['field14'] self.assertEqual(field.getPortalTypeName(), 'FormBooleanField') self.assertEqual(field['title'], 'Checkbox field') self.assertEqual(field.Description(), '') self.assertEqual(field['fgDefault'], True) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_list_field(self): form = self.portal['complex-form'] self.failIf('field15' not in form) field = form['field15'] self.assertEqual(field.getPortalTypeName(), 'FormSelectionField') self.assertEqual(field['title'], 'List field') self.assertEqual(field.Description(), '') self.assertEqual(field['fgDefault'], 'first') self.assertEqual(field['fgVocabulary'], ('first|First', 'second|Second', 'third|Third')) self.assertEqual(field['fgFormat'], 'select') self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_radio_field(self): form = self.portal['complex-form'] self.failIf('field16' not in form) field = form['field16'] self.assertEqual(field.getPortalTypeName(), 'FormSelectionField') self.assertEqual(field['title'], 'Radio field') self.assertEqual(field.Description(), '') self.assertEqual(field['fgDefault'], 'first') self.assertEqual(field['fgVocabulary'], ('first|First', 'second|Second', 'third|Third')) self.assertEqual(field['fgFormat'], 'radio') self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_multilist_field(self): form = self.portal['complex-form'] self.failIf('field17' not in form) field = form['field17'] self.assertEqual(field.getPortalTypeName(), 'FormMultiSelectionField') self.assertEqual(field['title'], 'Multi list field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['fgDefault'], ('first', 'third')) self.assertEqual(field['fgVocabulary'], ('first|First', 'second|Second', 'third|Third')) self.assertEqual(field['fgFormat'], 'select') self.assertEqual(field['fgRows'], 5) self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_multicheckbox_field(self): form = self.portal['complex-form'] self.failIf('field18' not in form) field = form['field18'] self.assertEqual(field.getPortalTypeName(), 'FormMultiSelectionField') self.assertEqual(field['title'], 'Multi checkbox field') self.assertEqual(field.Description(), '') self.assertEqual(field['required'], True) self.assertEqual(field['fgDefault'], ('first', 'third')) self.assertEqual(field['fgVocabulary'], ('first|First', 'second|Second', 'third|Third')) self.assertEqual(field['fgFormat'], 'checkbox') self.assertEqual(field.created(), form.created()) self.assertEqual(field.modified(), form.modified()) def test_fieldset(self): self.failIf('fieldset-form' not in self.portal) form = self.portal['fieldset-form'] self.assertEqual(form.objectIds(), ['mailer', 'thank-you', 'checkbox', 'datetime', 'Other']) fieldset = form['Other'] self.assertEqual(fieldset['title'], 'Other') self.assertEqual(fieldset.objectIds(), ['email', 'float', 'string']) class FakeRequest(dict): def __init__(self, **kwargs): self.form = kwargs class TestSubmit(ptc.PloneTestCase): """ test ya_gpg.py """ def dummy_send(self, mfrom, mto, messageText): self.mfrom = mfrom self.mto = mto self.messageText = messageText def afterSetUp(self): transmogrifier = ITransmogrifier(self.portal) transmogrifier('test_import') self.form = getattr(self.folder, 'complex-form') for i in self.form.contentValues(): field = i.getField('required') if field is not None: field.getMutator(i)(False) self.mailhost = self.folder.MailHost self.mailhost._send = self.dummy_send def test_submitting(self): """ Test submitting of form """ request = FakeRequest(field2='field2@mail.org') errors = self.form.fgvalidate(REQUEST=request) msg = email.message_from_string(self.messageText) self.assertEqual(msg.get('To'), 'Test ') self.assertEqual(msg.get('Subject'), '=?utf-8?q?Test_form_submit?=') def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestImport)) suite.addTest(unittest.makeSuite(TestSubmit)) return suite