This file serves as a testing overview for the North * project. 
It will only go over non-ajax functionality as that is all we
can test in these functional tests.


Let's do some setup and log in...

    >>> from Products.Five.testbrowser import Browser
	>>> self.setRoles(("Manager",))
	
    >>> browser = Browser()
    >>> browser.handleErrors = False
    >>> portal_url = self.portal.absolute_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()

We then turn off the various portlets, because they sometimes duplicate links
and text (e.g. the navtree, the recent recent items listing) that we wish to
test for in our own views. Having no portlets makes things easier.

    >>> 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((self.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((self.portal, right_column), IPortletAssignmentMapping)
    >>> for name in right_assignable.keys():
    ...     del right_assignable[name]


Now, check to see that north star has a menu item in the control panel

    >>> browser.open(self.portal.absolute_url())
    >>> browser.getLink('Site Setup').click()
    >>> 'Workflow Manager' in browser.contents
    True
    

Open up the workflow manager

    >>> browser.getLink('Workflow Manager').click()
    
There should not be any plone workflows by default listed.

    >>> 'folder_workflow' in browser.contents
    False
    
    >>> 'plone_workflow' in browser.contents
    False
    
    >>> 'intranet_workflow' in browser.contents
    False
    
    >>> 'intranet_folder_workflow' in browser.contents
    False
    
    >>> 'one_state_workflow' in browser.contents
    False
    
    >>> 'simple_publication_workflow' in browser.contents
    False
    
    >>> "You have no custom workflows." in browser.contents
    True
    
    
Let's start by creating a new workflow. We'll clone it from the
Simple publication workflow and call it "My Simple Publication Workflow".

    >>> browser.getLink("create a new workflow").click()
    >>> browser.getControl(name='clone-from-workflow').value = ['simple_publication_workflow']
    >>> browser.getControl(name='workflow-name').value = "My Simple Publication Workflow"
    >>> browser.getControl(name='add').click()
    
    
It should have been created
    
    >>> "My Simple Publication Workflow" in browser.contents
    True
    

The id should have also been created

    >>> "my-simple-publication-workflow" in browser.contents
    True
    
Test modifying a permission role

    >>> browser.getControl(name="permission-Edit-role-Reviewer-state-private").value
    []
    >>> browser.getControl(name="permission-Edit-role-Reviewer-state-private").value = True
    
    >>> browser.getControl(name="state-private-form.actions.save").click()
    
Now see if it worked

    >>> browser.getControl(name="permission-Edit-role-Reviewer-state-private").value
    True
    
Now uncheck that same one

    >>> browser.getControl(name="permission-Edit-role-Reviewer-state-private").value = False
    >>> browser.getControl(name="state-private-form.actions.save").click()
    >>> browser.getControl(name="permission-Edit-role-Reviewer-state-private").value
    []
    
Let's try some group role stuff now.
First, let's check one.

    >>> browser.getControl(name="group-Administrators-role-Reviewer-state-private").value
    []
    >>> browser.getControl(name="group-Administrators-role-Reviewer-state-private").value = True
    >>> browser.getControl(name="state-private-form.actions.save").click()
    >>> browser.getControl(name="group-Administrators-role-Reviewer-state-private").value
    True
    
And uncheck it now

    >>> browser.getControl(name="group-Administrators-role-Reviewer-state-private").value = False
    >>> browser.getControl(name="state-private-form.actions.save").click()
    >>> browser.getControl(name="group-Administrators-role-Reviewer-state-private").value
    []
    
Let's say we don't want the member to be able to submit content for publication here.

    >>> browser.getControl(name="transition-submit-state-private").value
    True
    >>> browser.getControl(name="transition-submit-state-private").value = False
    >>> browser.getControl(name="state-private-form.actions.save").click()
    >>> browser.getControl(name="transition-submit-state-private").value
    []
    
Let's practice re-adding again

    >>> browser.getControl(name="transition-submit-state-private").value
    []
    >>> browser.getControl(name="transition-submit-state-private").value = True
    >>> browser.getControl(name="state-private-form.actions.save").click()
    >>> browser.getControl(name="transition-submit-state-private").value
    True
    
Suppose we'd like the initial state to be published now...

    >>> browser.getControl(name='state-published-initial-state').value
    []
    >>> browser.getControl(name='state-private-initial-state').value
    True
    >>> browser.getControl(name='state-published-initial-state').value = True
    >>> browser.getControl(name='state-published-form.actions.save').click()
    
    >>> browser.getControl(name='state-published-initial-state').value
    True
    >>> browser.getControl(name='state-private-initial-state').value
    []
    
Let's edit the title and description now.

    >>> browser.getControl(name='state-private-title').value = "My New Title"
    >>> browser.getControl(name='state-private-description').value = "My New Description"
    >>> browser.getControl(name="state-private-form.actions.save").click()
    
    >>> browser.getControl(name='state-private-title').value
    'My New Title'
    >>> browser.getControl(name='state-private-description').value
    'My New Description'
    

We'll move onto editing Transitions now
Let's edit the guards first

    >>> browser.getControl(name='transition-retract-guard-permission-rpc').value
    False
    >>> browser.getControl(name='transition-retract-guard-permission-rpc').value = True
    >>> browser.getControl(name='transition-retract-guard-roles').value
    []
    >>> browser.getControl(name='transition-retract-guard-roles').value = ['Member']
    >>> browser.getControl(name='transition-retract-guard-groups').value
    []
    >>> browser.getControl(name='transition-retract-guard-groups').value = ['Reviewers']
    >>> browser.getControl(name='transition-retract-form.actions.save').click()
    
    >>> browser.getControl(name='transition-retract-guard-permission-rpc').value
    True
    >>> browser.getControl(name='transition-retract-guard-roles').value
    ['Member']
    >>> browser.getControl(name='transition-retract-guard-groups').value
    ['Reviewers']


Now, we'll modify some properties

    >>> browser.getControl(name='transition-retract-new-state').value
    ['private']
    >>> browser.getControl(name='transition-retract-new-state').value = ['published']
    >>> browser.getControl(name='transition-retract-autotrigger').value
    []
    >>> browser.getControl(name='transition-retract-autotrigger').value = True
    >>> browser.getControl(name='transition-retract-display-name').value = 'My New Name'
    >>> browser.getControl(name='transition-retract-form.actions.save').click()
    
    >>> browser.getControl(name='transition-retract-new-state').value
    ['published']
    >>> browser.getControl(name='transition-retract-autotrigger').value
    ['0']
    >>> browser.getControl(name='transition-retract-display-name').value
    'My New Name'
    
    
We'll even add a state that uses this transition from here.

    >>> browser.getControl(name='transition-retract-state-private-selected').value
    []
    >>> browser.getControl(name='transition-retract-state-private-selected').value = True
    >>> browser.getControl(name='transition-retract-form.actions.save').click()
    
Should add it in two places, the state and the transition

    >>> browser.getControl(name='transition-retract-state-private-selected').value
    True
    >>> browser.getControl(name='transition-retract-state-private').value
    True

    
Let's test adding a new state and test error handling.

    >>> browser.getControl(name='add-new-state-button-one').click()
    >>> browser.getControl(name='clone-from-state').value = ['private']
    >>> browser.getControl(name='add').click()
    
Should show error
    
    >>> "field is required" in browser.contents
    True
    >>> browser.getControl(name='clone-from-state').value
    ['private']
    
    >>> browser.getControl(name='state-name').value = "My New State"
    >>> browser.getControl(name='add').click()
    
Should now be added

    >>> "My New State" in browser.contents
    True

Now the same thing for a transition

    >>> browser.getControl(name='add-new-transition-button-one').click()
    >>> browser.getControl(name='clone-from-transition').value = ['retract']
    >>> browser.getControl(name='add').click()

Should show error

    >>> "field is required" in browser.contents
    True
    >>> browser.getControl(name='clone-from-transition').value
    ['retract']

    >>> browser.getControl(name='transition-name').value = "My New Transition"
    >>> browser.getControl(name='add').click()

Should now be added

    >>> "My New Transition" in browser.contents
    True
    
    
Let's now delete the workflow we've been playing with.

    >>> browser.getControl(name='delete-workflow-button').click()
    >>> browser.getControl(name='button.confirm.delete').click()
    
    >>> "My Simple Publication Workflow" in browser.contents
    False

