===========================================
Functional Testing of the Bulk Sharing Page
===========================================

The test setup has already ensured that we have a number of users available.
Let's also create some

    >>> self.setUpDefaultWorkflow(defaultWorkflow='one_state_workflow')
    >>> self.update_security()

    >>> from Testing.testbrowser import Browser
    >>> browser = Browser()
    >>> browser.handleErrors = False

Let us log all exceptions, which is useful for debugging.

    >>> self.portal.error_log._ignored_exceptions = ()

Manager
-------

A Manager should be able to delegate all the accessible roles.

    >>> browser.open('%s/login_form' % self.portal.absolute_url())
    >>> browser.getControl(name='__ac_name').value = 'manager'
    >>> browser.getControl(name='__ac_password').value = 'secret'
    >>> browser.getControl('Log in').click()

    >>> browser.open('%s/folder_contents' % self.folder.absolute_url())
    >>> browser.getControl(name='paths:list').getControl(value='/plone/Members/test_user_1_/newsitem1').click()
    >>> browser.getControl(name='paths:list').getControl(value='/plone/Members/test_user_1_/event1').click()
    >>> browser.getControl(name='@@bulksharing:method').click()

Check if selected objects are present on bulksharing page
    >>> 'newsitem1' in browser.contents
    True
    >>> 'event1' in browser.contents
    True

Check if selected items are selected
    >>> browser.getControl(name='paths:list').getControl(value='/plone/Members/test_user_1_/newsitem1').selected
    True
    >>> browser.getControl(name='paths:list').getControl(value='/plone/Members/test_user_1_/event1').selected
    True

    >>> "Can add" in browser.contents
    True
    >>> "Can edit" in browser.contents
    True
    >>> "Can manage" in browser.contents
    False
    >>> "Can own" in browser.contents
    False
    >>> "Can subscribe" in browser.contents
    False
    >>> "Can view" in browser.contents
    True
    >>> "Can review" in browser.contents
    True

    >>> browser.getControl(name='search_term').value = "delegate_contributor"
    >>> browser.getControl(name='form.button.Search').click()
    >>> browser.getControl(name='entries.role_Contributor:records').getControl(value='True',index=-1).click()

    >>> browser.getControl(name='search_term').value = "delegate_editor"
    >>> browser.getControl(name='form.button.Search').click()
    >>> browser.getControl(name='entries.role_Editor:records').getControl(value='True',index=-1).click()

    >>> browser.getControl(name='search_term').value = "delegate_reader"
    >>> browser.getControl(name='form.button.Search').click()
    >>> browser.getControl(name='entries.role_Reader:records').getControl(value='True',index=-1).click()

    >>> browser.getControl(name='search_term').value = "delegate_reviewer"
    >>> browser.getControl(name='form.button.Search').click()
    >>> browser.getControl(name='entries.role_Reviewer:records').getControl(value='True',index=-1).click()

    >>> browser.getControl("Save").click()
    >>> 'Changes saved' in browser.contents
    True


Make sure we can search by login name on the Bulk Sharing page.
Prevents regressions of #6853.

    >>> browser.getControl(name='search_term').value = 'testuser'
    >>> browser.getControl(name='form.button.Search').click()
    >>> 'testuser' in browser.contents
    True

Make sure we can search by login name on the Bulk Sharing page.
Prevents regressions of #7576.

    >>> browser.getControl(name='search_term').value = 'nonasciiuser'
    >>> browser.getControl(name='form.button.Search').click()
    >>> 'nonasciiuser' in browser.contents
    True

Make sure we can search for groups by id

    >>> browser.getControl(name='search_term').value = 'testgroup'
    >>> browser.getControl(name='form.button.Search').click()
    >>> 'testgroup' in browser.contents
    True

Make sure we can search for groups by title
    >>> browser.getControl(name='search_term').value = 'meaningful'
    >>> browser.getControl(name='form.button.Search').click()
    >>> 'meaningful' in browser.contents
    True


Owner
-----

The owner should be able to delegate Reader, Editor and Contributor.

    >>> browser.open('%s/logout' % self.portal.absolute_url())
    >>> browser.open('%s/login_form' % self.portal.absolute_url())
    >>> browser.getControl(name='__ac_name').value = 'test_user_1_'
    >>> browser.getControl(name='__ac_password').value = 'secret'
    >>> browser.getControl('Log in').click()

    >>> browser.open('%s/folder_contents' % self.folder.absolute_url())
    >>> browser.getControl(name='paths:list').getControl(value='/plone/Members/test_user_1_/newsitem1').click()
    >>> browser.getControl(name='paths:list').getControl(value='/plone/Members/test_user_1_/event1').click()
    >>> browser.getControl(name='@@bulksharing:method').click()

    >>> "Can add" in browser.contents
    True
    >>> "Can edit" in browser.contents
    True
    >>> "Can manage" in browser.contents
    False
    >>> "Can own" in browser.contents
    False
    >>> "Can subscribe" in browser.contents
    False
    >>> "Can view" in browser.contents
    True
    >>> "Can review" in browser.contents
    False

Delegated Reader
----------------

A delegated reader should only be able to view the page, not even get to the
Sharing tab.

    >>> browser.open('%s/logout' % self.portal.absolute_url())
    >>> browser.open('%s/login_form' % self.portal.absolute_url())
    >>> browser.getControl(name='__ac_name').value = 'delegate_reader'
    >>> browser.getControl(name='__ac_password').value = 'secret'
    >>> browser.getControl('Log in').click()

    >>> browser.open('%s' % self.folder.event1.absolute_url())
    >>> browser.getLink('Sharing')
    Traceback (most recent call last):
    ...
    LinkNotFoundError

Delegated Editor
----------------

A delegated Editor can give other people "view" and "edit" rights.

    >>> browser.open('%s/logout' % self.portal.absolute_url())
    >>> browser.open('%s/login_form' % self.portal.absolute_url())
    >>> browser.getControl(name='__ac_name').value = 'delegate_editor'
    >>> browser.getControl(name='__ac_password').value = 'secret'
    >>> browser.getControl('Log in').click()

    >>> browser.open('%s' % self.folder.newsitem1.absolute_url())
    >>> browser.getLink('Sharing').click()

    >>> "Can add" in browser.contents
    False
    >>> "Can edit" in browser.contents
    True
    >>> "Can view" in browser.contents
    True
    >>> "Can review" in browser.contents
    False


Delegated Contributor
---------------------

A delegated Contributor cannot assign any further rights.

    >>> browser.open('%s/logout' % self.portal.absolute_url())
    >>> browser.open('%s/login_form' % self.portal.absolute_url())
    >>> browser.getControl(name='__ac_name').value = 'delegate_contributor'
    >>> browser.getControl(name='__ac_password').value = 'secret'
    >>> browser.getControl('Log in').click()

    >>> browser.open('%s' % self.folder.newsitem1.absolute_url())
    >>> browser.getLink('Sharing').click()
    Traceback (most recent call last):
    ...
    LinkNotFoundError

Delegated Reviewer
------------------

A delegated Reviewer can assign "view" and "review" rights.

    >>> browser.open('%s/logout' % self.portal.absolute_url())
    >>> browser.open('%s/login_form' % self.portal.absolute_url())
    >>> browser.getControl(name='__ac_name').value = 'delegate_reviewer'
    >>> browser.getControl(name='__ac_password').value = 'secret'
    >>> browser.getControl('Log in').click()

    >>> browser.open('%s' % self.folder.event1.absolute_url())
    >>> browser.getLink('Sharing').click()

    >>> "Can add" in browser.contents
    False
    >>> "Can edit" in browser.contents
    False
    >>> "Can manage" in browser.contents
    False
    >>> "Can own" in browser.contents
    False
    >>> "Can subscribe" in browser.contents
    False
    >>> "Can view" in browser.contents
    True
    >>> "Can review" in browser.contents
    True
