Functional test with PloneFormGen
==================================

Initial imports and defines.
-----------------------------
    >>> from Products.CMFCore.utils import getToolByName
    >>> portal_url =  portal.absolute_url()
    >>> start_form_url = portal.start_form.absolute_url()
    >>> form_url = portal.form.absolute_url()
    >>> final_form = portal.final_form
    >>> script_adapter = portal.form.script_adapter
    >>> script_adapter_url = script_adapter.absolute_url()
    >>> mailhost = getToolByName(portal, 'MailHost')
    >>> def prink(e): print eval('"""%s"""' %str(e))

Check the amount of message
----
    >>> len(mailhost.messages)
    0

Setting up.
-----------
    >>> try:
    ...     from Testing.testbrowser import Browser
    ... except ImportError:
    ...     from Products.Five.testbrowser import Browser
    >>> browser = Browser()

For debugging.
--------------
    >>> browser.handleErrors = True
    >>> portal.error_log._ignored_exceptions = ()

Turn off portlets.
------------------
    >>> from zope.component import getUtility, getMultiAdapter
    >>> from plone.portlets.interfaces import IPortletManager
    >>> from plone.portlets.interfaces import IPortletAssignmentMapping

    >>> right_column = getUtility(IPortletManager, name=u"plone.leftcolumn")
    >>> right_assignable = getMultiAdapter((portal, right_column), IPortletAssignmentMapping)
    >>> for name in right_assignable.keys():
    ...     del right_assignable[name]

    >>> right_column = getUtility(IPortletManager, name=u"plone.rightcolumn")
    >>> right_assignable = getMultiAdapter((portal, right_column), IPortletAssignmentMapping)
    >>> for name in right_assignable.keys():
    ...     del right_assignable[name]

Log in as the portal owner.
----------------------------
    >>> browser.open(portal_url)
    >>> from Products.PloneTestCase.setup import portal_owner, default_password
    >>> browser.open(portal_url + '/login_form?came_from=' + portal_url)
    >>> browser.getControl(name='__ac_name').value = portal_owner
    >>> browser.getControl(name='__ac_password').value = default_password
    >>> browser.getControl(name='submit').click()

    >>> try:
    ...     browser.open(form_url)
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()

    >>> browser.open(form_url)
    >>> '91A9848AC8BCDF6D5A8EBDB5A041B00E' in browser.contents
    True

Start from Start Form
---------------------
    >>> browser.open(start_form_url)
    >>> browser.getControl(name="replyto").value = "my@email.com"
    >>> browser.getControl(name="topic").value = "Test Donation"
    >>> browser.getControl(name="comments").value = "Test Comments."
    >>> browser.getControl(name="AMOUNT").value = "5.00"
    >>> browser.getControl(name="form_submit").click()
    >>> 'value="5.00"' in browser.contents
    True
    >>> browser.getControl(name="form_submit").click()
    >>> 'Thank You' in browser.contents
    True
    >>> 'Thanks for your input.' in browser.contents
    True

    >>> len(mailhost.messages)
    1
    >>> msg = mailhost.messages[-1]
    >>> prink(msg)
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: ...
    To: <info@portal.com>
    From: 
    Subject: =?utf-8?q?Form_Submission?=
    MIME-Version: 1.0
    X-HTTP_X_FORWARDED_FOR: 
    X-REMOTE_ADDR: 
    X-PATH_INFO: /plone/final_form/thank-you/@@payment-succeeded
    ...

    >>> browser.open(form_url)

    >>> try:
    ...     browser.getLink(id="make_order_number_aware").click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()

#    >>> browser.getLink(id="make_order_number_aware").click()

    >>> browser.getControl(name="numbering_type").value = ['Incremental']
    >>> browser.getControl(name="next_incremental_number").value = '1'
    >>> browser.getControl(name="form.button.UpdateNumber").click()

    >>> try:
    ...     browser.getLink('View').click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()

#    >>> browser.getLink('View').click()

    >>> 'value="1"' in browser.contents
    True
    >>> 'value="2"' in browser.contents
    False
    >>> browser.getControl(name="form_submit").click()

    >>> len(mailhost.messages)
    2

    >>> browser.open(form_url)
    >>> 'value="2"' in browser.contents
    True


Add AMOUNT field to final_form
-------------------------------
    >>> final_form.invokeFactory('FormStringField', 'AMOUNT', title='AMOUNT')
    'AMOUNT'
    >>> browser.open(start_form_url)
    >>> browser.getControl(name="replyto").value = "my@email.com"
    >>> browser.getControl(name="topic").value = "Test Donation"
    >>> browser.getControl(name="comments").value = "Test Comments."
    >>> browser.getControl(name="AMOUNT").value = "5.00"
    >>> browser.getControl(name="form_submit").click()
    >>> browser.getControl(name="form_submit").click()

    >>> len(mailhost.messages)
    3

#    >>> msg = mailhost.messages[-1]
#    >>> prink(msg)
