Initial imports and defines.
----
    >>> portal_url =  portal.absolute_url()
    >>> doc01 = portal.doc01
    >>> doc01_url = doc01.absolute_url()
    >>> cart_url = '%s/@@cart' % portal_url

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

    >>> left_column = getUtility(IPortletManager, name=u"plone.leftcolumn")
    >>> left_assignable = getMultiAdapter((portal, left_column), IPortletAssignmentMapping)
    >>> for name in left_assignable.keys():
    ...     del left_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()

Verify that we can create ShippingMethod under portal.
----
    >>> browser.open(portal_url)
    >>> browser.getLink(id='shippingmethod').url.endswith("createObject?type_name=ShippingMethod")
    True

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

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

    >>> browser.getControl(name='title').value = "ShippingMethod01"
    >>> browser.getControl(name='description').value = "Descripton of ShippingMethod01"
    >>> browser.getControl(name='from_country:list').getControl(value='FI').selected = True
    >>> browser.getControl(name='to_country:list').getControl(value='US').selected = True
    >>> browser.getControl(name='base_charge').value = "10"
    >>> browser.getControl(name='weight_charge').value = "5"
    >>> browser.getControl(name='fuel_rate').value = "6"
    >>> browser.getControl(name='insurance_base').value = "15"
    >>> browser.getControl(name='insurance_rate').value = "0.5"
    >>> browser.getControl(name='risk_rate').value = "10.5"
    >>> browser.getControl(name='min_delivery_days').value = '3'
    >>> browser.getControl(name='max_delivery_days').value = "14"
    >>> try:
    ...     browser.getControl('Save').click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()
    >>> browser.url
    'http://nohost/plone/shippingmethod01'
    >>> browser.getLink('Edit').click()
    >>> 'value="ShippingMethod01"' in browser.contents
    True
    >>> 'Descripton of ShippingMethod01' in browser.contents
    True
    >>> 'selected="selected" value="FI"' in browser.contents
    True
    >>> 'selected="selected" value="US"' in browser.contents
    True
    >>> 'value="10.0"' in browser.contents
    True
    >>> 'value="5.0"' in browser.contents
    True
    >>> 'value="6.0"' in browser.contents
    True
    >>> 'value="15.0"' in browser.contents
    True
    >>> 'value="0.5"' in browser.contents
    True
    >>> 'value="10.5"' in browser.contents
    True
    >>> 'value="3"' in browser.contents
    True
    >>> 'value="14"' in browser.contents
    True
    >>> browser.getLink('View').click()
    >>> browser.getLink('Publish').click()

Now log out, go to doc01 and add to cart.
-----------------------------------------
    >>> browser.getLink('Log out').click()
    >>> browser.open(doc01_url)

    >>> try:
    ...     browser.getControl(name="form.button.AddToCart").click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()

#    >>> browser.getControl(name="form.button.AddToCart").click()

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

#    >>> browser.open(cart_url)

    >>> 'ShippingMethod01' in browser.contents
    True

Log in and add another shipping method.
----------------------------------------
    >>> 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()
    >>> browser.open(portal_url)

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

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

    >>> browser.getControl(name='title').value = "ShippingMethod02"
    >>> browser.getControl(name='description').value = "Descripton of ShippingMethod02"
    >>> browser.getControl(name='from_country:list').getControl(value='FI').selected = True
    >>> browser.getControl(name='to_country:list').getControl(value='US').selected = True
    >>> browser.getControl(name='base_charge').value = "5"
    >>> browser.getControl(name='weight_charge').value = "10"
    >>> browser.getControl(name='fuel_rate').value = "1"
    >>> browser.getControl(name='insurance_base').value = "3"
    >>> browser.getControl(name='insurance_rate').value = "0.5"
    >>> browser.getControl(name='risk_rate').value = "10.5"
    >>> browser.getControl(name='min_delivery_days').value = '3'
    >>> browser.getControl(name='max_delivery_days').value = "14"
    >>> try:
    ...     browser.getControl('Save').click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()

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

    >>> browser.getLink('Publish').click()

Log out and check cart.
------------------------
    >>> browser.getLink('Log out').click()

    >>> browser.open(doc01_url)

    >>> try:
    ...     browser.getControl(name="form.button.AddToCart").click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()

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

    >>> shipping01_uid = portal.shippingmethod01.UID()
    >>> shipping02_uid = portal.shippingmethod02.UID()

    >>> open('/tmp/testbrowser.html', 'w').write(browser.contents)

    >>> value1 = 'value="%s" selected="selected"' % shipping01_uid
    >>> value2 = 'value="%s" selected="selected"' % shipping02_uid
    >>> value1 in browser.contents or value2 in browser.contents
    True

    >>> browser.getControl(name="shipping_method").value = [shipping01_uid]

    >>> try:
    ...     browser.getControl(name="form.button.UpdateShippingMethod").click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()

#    >>> browser.getControl(name="form.button.UpdateShippingMethod").click()

    >>> value1 in browser.contents
    True
    >>> browser.getControl(name="shipping_method").value = [shipping02_uid]

    >>> try:
    ...     browser.getControl(name="form.button.UpdateShippingMethod").click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()
    >>> value2 in browser.contents
    True

    >>> browser.getControl(name="shipping_method").value = [shipping01_uid]

    >>> try:
    ...     browser.getControl(name="form.button.UpdateShippingMethod").click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()
    >>> value1 in browser.contents
    True

    >>> browser.getControl(name="shipping_method").value = [shipping02_uid]

    >>> try:
    ...     browser.getControl(name="form.button.UpdateShippingMethod").click()
    ... except:
    ...     print portal.error_log.getLogEntries()[0]['tb_text']
    ...     import pdb; pdb.set_trace()
    >>> value2 in browser.contents
    True

    >>> open('/tmp/testbrowser.html', 'w').write(browser.contents)

