Staging behavior
================

A Dexterity content type is created by our textfixture profile.

If we access the site as an admin TTW::

    >>> from plone.testing.z2 import Browser
    >>> browser = Browser(layer['app'])
    >>> browser.handleErrors = False
    >>> portal = layer['portal']
    >>> portal_url = 'http://nohost/plone'
    >>> from plone.app.testing.interfaces import SITE_OWNER_NAME, SITE_OWNER_PASSWORD
    >>> browser.addHeader('Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD))

We can see this type in the addable types at the root of the site::

    >>> browser.open(portal_url + "/folder_factories")
    >>> browser.contents
    '...stageable_type...'
    >>> browser.getControl("Stageable Type").click()
    >>> browser.getControl("Add").click()
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = "My Object"
    >>> browser.getControl(name="form.buttons.save").click()
    >>> browser.url
    'http://nohost/plone/stageable_type/view'

Checkout

    >>> browser.getLink("Check out").click()
    >>> browser.contents
    '...This is a working copy of...My Object..., made by...admin... on...'

Cancel checkout

    >>> browser.getLink("Cancel check-out").click()
    >>> browser.contents
    '...Cancel check-out of...My Object...'
    >>> browser.getControl(name='form.button.Cancel').click()
    >>> browser.url
    'http://nohost/plone/stageable_type'

Test inside a folder
--------------------

    >>> browser.open(portal_url + "/folder_factories")
    >>> browser.contents
    '...test_folder...'
    >>> browser.getControl("Test Folder").click()
    >>> browser.getControl("Add").click()
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = "My Folder"
    >>> browser.getControl(name="form.buttons.save").click()
    >>> browser.url
    'http://nohost/plone/test_folder/view'

    >>> browser.open("http://nohost/plone/test_folder/folder_factories")
    >>> browser.contents
    '...stageable_type...'
    >>> browser.getControl("Stageable Type").click()
    >>> browser.getControl("Add").click()
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = "My Sub-object"
    >>> browser.getControl(name="form.buttons.save").click()
    >>> browser.url
    'http://nohost/plone/test_folder/stageable_type/view'

Checkout

    >>> browser.getLink("Check out").click()
    >>> browser.contents
    '...This is a working copy of...My Sub-object..., made by...admin... on...'

Cancel checkout

    >>> browser.getLink("Cancel check-out").click()
    >>> browser.contents
    '...Cancel check-out of...My Sub-object...'
    >>> browser.getControl(name='form.button.Cancel').click()
    >>> browser.url
    'http://nohost/plone/test_folder/stageable_type'

Working copy workflows
----------------------

It's possible to assign a different workflow to working copies in combination with
Products.CMFPlacefulWorkflow.  This usually makes sense: you should be checking in a working copy
rather than publishing it.

We have a working copy workflow defined in our textfixture profile.  To enable you need to set a
couple of site properties.

    >>> browser.open("http://nohost/plone/portal_properties/site_properties/manage_propertiesForm")
    >>> browser.getControl(name="enable_checkout_workflow:boolean").value = [True]
    >>> browser.getControl(name="checkout_workflow_policy:string").value = 'working-copy'
    >>> browser.getControl(name="manage_editProperties:method").click()

Create a new page to test workflows with

    >>> browser.open("http://nohost/plone/test_folder/folder_factories")
    >>> browser.contents
    '...stageable_type...'
    >>> browser.getControl("Stageable Type").click()
    >>> browser.getControl("Add").click()
    >>> browser.getControl(name="form.widgets.IDublinCore.title").value = "My workflow test"
    >>> browser.getControl(name="form.buttons.save").click()
    >>> browser.url
    'http://nohost/plone/test_folder/stageable_type-1/view'

Checkout

    >>> browser.getLink("Check out").click()
    >>> browser.contents
    '...This is a working copy of...My workflow test..., made by...admin... on...'
    >>> browser.contents
    '...state-draft-copy...'

Check security permisions on workflow have been applied.  We remove copy or move permissions in our
workflow so this should not appear in the action menu.
http://code.google.com/p/dexterity/issues/detail?id=258

    >>> 'copy_of_stageable_type-1/object_copy' in browser.contents
    False
