User / Group control panel ========================== First some initial setup code: >>> self.loginAsManager() >>> config_url = 'http://nohost/plone/plone_control_panel' >>> self.browser.open(config_url) >>> self.browser.getLink('Users and Groups').click() >>> '@@usergroup-userprefs' in self.browser.url True With the 'many users' flag disabled, should allow us to see the 'show all' button. >>> 'Show all' in self.browser.contents True So let's try a search, first on name... >>> self.browser.getControl(name='searchstring').value = 'Richard' >>> self.browser.getControl(name='form.button.Search').click() >>> 'Richard Ramirez' in self.browser.contents True >>> 'Sara Richardson' in self.browser.contents True >>> 'Émilie Richard' in self.browser.contents True Try a search with an accent... >>> self.browser.getControl(name='searchstring').value = 'Émilie' >>> self.browser.getControl(name='form.button.Search').click() >>> 'Émilie Richard' in self.browser.contents True And now on userid... >>> self.browser.getControl(name='searchstring').value = 'TWrMCLIo' >>> self.browser.getControl(name='form.button.Search').click() >>> 'Autumn Brooks' in self.browser.contents True And now on email address.. >>> self.browser.getControl(name='searchstring').value = 'gracie@' >>> self.browser.getControl(name='form.button.Search').click() >>> 'Gracie Adams' in self.browser.contents True Make some modifications to Gracie's roles... >>> self.browser.getControl(name='users.roles:list:records').getControl(value='Contributor').selected False >>> self.browser.getControl(name='users.roles:list:records').getControl(value='Contributor').selected = True >>> self.browser.getControl(name='form.button.Modify').click() The previous search should still be in effect... >>> self.browser.getControl(name='searchstring').value 'gracie@' But values should be changed >>> self.browser.getControl(name='users.roles:list:records').getControl(value='Contributor').selected True We'll reset her password. >>> self.browser.getControl(name='users.resetpassword:records').value = True >>> self.browser.getControl(name='form.button.Modify').click() Whoops, we haven't set up our mailhost... >>> 'No mailhost defined. Unable to reset passwords.' in self.browser.contents True # Mailhost is failing in this testcase, so commenting this bit out for now. # Let's do that and try again. # >>> self.browser.open('http://nohost/plone/@@mail-controlpanel') # >>> self.browser.getControl('SMTP server').value = 'nohost' # >>> self.browser.getControl("Site 'From' address").value = 'bob@example.com' # >>> self.browser.getControl('Save').click() # >>> self.browser.getLink('Users and Groups').click() # >>> self.browser.getControl(name='searchstring').value = 'gracie@' # >>> self.browser.getControl(name='form.button.Search').click() # >>> 'Gracie Adams' in self.browser.contents # True # >>> self.browser.getControl(name='users.resetpassword:records').value = True # >>> self.browser.getControl(name='form.button.Modify').click() # >>> 'No mailhost defined. Unable to reset passwords.' in self.browser.contents # False Let's try deleting Gracie. >>> self.browser.getControl(name='searchstring').value = 'gracie@' >>> self.browser.getControl(name='form.button.Search').click() >>> self.browser.getControl(name='delete:list').getControl(value='RwAO2YPa').selected = True >>> self.browser.getControl(name='form.button.Modify').click() The previous search should still be in effect... >>> self.browser.getControl(name='searchstring').value 'gracie@' But the user Gracie Adams should now be gone. >>> 'Gracie Adams' in self.browser.contents False Turning on the 'many users' flag should remove the 'Search All' button. >>> self.browser.getLink('Settings').click() >>> self.browser.getControl(name='form.many_users').value = True >>> self.browser.getControl('Save').click() Go directly to the userprefs panel (getting link "Users" results in a trip to the Members folder). >>> self.browser.open('http://nohost/plone/@@usergroup-userprefs') >>> 'Show All' in self.browser.contents False An empty search string while 'many users' is enabled should not perform a search. >>> self.browser.getControl(name='form.button.Search').click() >>> 'Enter a username to search for' in self.browser.contents True Go directly to the groupprefs panel (getting link "Groups" results in a trip to the "users and groups" link). >>> self.browser.open('http://nohost/plone/@@usergroup-groupprefs') With the 'many groups' flag disabled, should allow us to see the 'show all' button. >>> 'Show all' in self.browser.contents True We'll attempt a search... >>> self.browser.getControl(name='searchstring').value = 'group3' >>> self.browser.getControl(name='form.button.Search').click() >>> 'Group 3' in self.browser.contents True And again with the group's title >>> self.browser.getControl(name='searchstring').value = 'Group 3 accentu\xc3\xa9' >>> self.browser.getControl(name='form.button.Search').click() >>> 'group3' in self.browser.contents True Add a new role >>> self.browser.getControl(name='group_group3:list', index=1).getControl(value='Contributor').selected False >>> self.browser.getControl(name='group_group3:list', index=1).getControl(value='Contributor').selected = True >>> self.browser.getControl('Apply Changes').click() >>> self.browser.getControl(name='group_group3:list', index=1).getControl(value='Contributor').selected True And remove it again... >>> self.browser.getControl(name='group_group3:list', index=1).getControl(value='Contributor').selected = False >>> self.browser.getControl('Apply Changes').click() >>> self.browser.getControl(name='group_group3:list', index=1).getControl(value='Contributor').selected False Delete a group... >>> self.browser.getControl(name='delete:list').getControl(value='group3').selected = True >>> self.browser.getControl(name='form.button.Modify').click() >>> self.browser.getControl(name='searchstring').value 'Group 3 accentu\xc3\xa9' >>> 'group3' in self.browser.contents False Turning on the 'many groups' flag should remove the 'Search All' button. >>> self.browser.getLink('Settings').click() >>> self.browser.getControl(name='form.many_groups').value = True >>> self.browser.getControl('Save').click() >>> self.browser.getLink('Groups').click() >>> 'Search All' in self.browser.contents False An empty search string while 'many groups' is enabled should not perform a search. >>> self.browser.getControl(name='form.button.Search').click() >>> 'Group name' in self.browser.contents False Now let's try to break things. Add a test for http://dev.plone.org/plone/ticket/8940: "Group roles show up on the user roles page for members of that group." >>> self.browser.open('http://nohost/plone/@@usergroup-groupprefs') >>> self.browser.getControl(name='searchstring').value = 'Reviewers' >>> self.browser.getControl(name='form.button.Search').click() >>> self.browser.getControl(name='group_Reviewers:list', index=1).getControl(value='Reader').selected = True >>> self.browser.getControl('Apply Changes').click() >>> self.browser.getLink('Reviewers').click() >>> self.browser.getLink('Group Members').click() >>> self.browser.getControl(name='searchstring').value = 'Sean Foster' >>> self.browser.getControl(name='form.button.Search').click() >>> self.browser.getControl(name='add:list').getControl(value='SLUhquYa').selected = True >>> self.browser.getControl(name='form.button.Add').click() >>> self.browser.open('http://nohost/plone/@@usergroup-userprefs') >>> self.browser.getControl(name='searchstring').value = 'Sean Foster' >>> self.browser.getControl(name='form.button.Search').click() #So according to the ticket, this should fail, finding a checked checkbox instead of an "inherited" icon # >>> self.browser.getControl(name='users.roles:list:records').getControl(value='Reader').selected # Traceback (most recent call last): # ... # LookupError: value 'Reader' And then making some change to the user and saving it will assign that checked role directly to the user... >>> self.browser.open('http://nohost/plone/@@usergroup-groupprefs') >>> self.browser.getControl(name='searchstring').value = 'Authenticated' >>> self.browser.getControl(name='form.button.Search').click() >>> self.browser.getControl(name='group_AuthenticatedUsers:list', index=1).getControl(value='Editor').selected = False >>> self.browser.getControl('Apply Changes').click() >>> self.browser.open('http://nohost/plone/@@usergroup-userprefs') >>> self.browser.getControl(name='searchstring').value = 'Sean Foster' >>> self.browser.getControl(name='form.button.Search').click() According to the ticket, the user will now have an assigned role of 'Editor', which should not be the case. >>> self.browser.getControl(name='users.roles:list:records').getControl(value='Editor').selected False Turn off the many groups/users flags again >>> self.browser.getLink('Settings').click() >>> self.browser.getControl(name='form.many_groups').value = False >>> self.browser.getControl(name='form.many_users').value = False >>> self.browser.getControl('Save').click() Now let's try modifying some group memberships... >>> self.browser.open('http://nohost/plone/@@usergroup-groupprefs') >>> self.browser.getLink('Group 1 (group1)').click() >>> 'There is no group or user attached to this group.' in self.browser.contents True Make sure that providing a search string while hitting 'show all' does not search for just that term. >>> self.browser.getControl(name='searchstring').value = 'management' >>> self.browser.getControl(name='form.button.FindAll').click() >>> 'No matches' in self.browser.contents False >>> 'Brian Simmons' in self.browser.contents True >>> self.browser.getControl(name='searchstring').value is '' True # Now provide a term and do a search. # >>> self.browser.getControl(name='searchstring').value = 'management' # >>> self.browser.getControl(name='form.button.Search').click() # >>> 'No matches' in self.browser.contents # False # >>> 'Management' in self.browser.contents # True # >>> 'Brian Simmons' in self.browser.contents # False Check to make sure search results are ordered properly and display the title/fullname and id >>> self.browser.getControl(name='form.button.FindAll').click() >>> self.browser.contents '...Search for new group members... ...Abigail Simmons...(XYsmd7ux)... ...Alexandra Nelson...(FElYwiIr)... ...Blake Jenkins...(BlXLQh7r)...' Add some group members >>> self.browser.getControl(name='add:list').getControl(value='XYsmd7ux').selected = True >>> self.browser.getControl(name='add:list').getControl(value='BlXLQh7r').selected = True >>> self.browser.getControl(name='form.button.Add').click() These should be displayed in the Current group members section now. >>> self.browser.contents '...Current group members... ...Abigail Simmons...(XYsmd7ux)... ...Blake Jenkins...(BlXLQh7r)... ...Search for new group members...' Users/Groups can be removed from this list as well. >>> self.browser.getControl(name='delete:list').getControl(value='XYsmd7ux').selected = True >>> self.browser.getControl(name='form.button.Edit').click() >>> 'Changes made' in self.browser.contents True >>> 'Abigail Simmons' in self.browser.contents False Open the groups overview, make sure Group 1 and Group 2 don't have globally-assigned roles >>> self.browser.getLink('Group Members').click() >>> self.browser.open('http://nohost/plone/@@usergroup-groupprefs') >>> self.browser.getControl(name='group_group1:list', index=1).getControl(value='Contributor').selected False >>> self.browser.getControl(name='group_group2:list', index=1).getControl(value='Contributor').selected False Give the Group 1 group the contributor role >>> self.browser.getControl(name='group_group1:list', index=1).getControl(value='Contributor').selected = True >>> self.browser.getControl('Apply Changes').click() Now Group 1 should show the global contributor role >>> self.browser.getControl(name='group_group1:list', index=1).getControl(value='Contributor').selected True Let's try adding groups to a user. Go directly to the Users Overview screen. >>> self.browser.open('http://nohost/plone/@@usergroup-userprefs') >>> self.browser.getControl(name='searchstring').value = 'Sofia' >>> self.browser.getControl(name='form.button.Search').click() >>> 'Sofia Williams' in self.browser.contents True >>> self.browser.getLink('Sofia Williams').click() >>> self.browser.getLink('Group Memberships').click() >>> '@@usergroup-usermembership?userid=tyOxRnml' in self.browser.url True >>> self.browser.contents '...Group memberships for...Sofia Williams...(tyOxRnml)... ...Current group memberships... ...Authenticated Users... ...Assign to groups... ...Administrators... ...Group 1... ...Group 2... ...Reviewers...' >>> self.browser.getControl(name='add:list').getControl(value='group2').selected = True >>> self.browser.getControl(name='form.button.Add').click() >>> '@@usergroup-usermembership?userid=tyOxRnml' in self.browser.url True >>> self.browser.contents '...Group memberships for...Sofia Williams...(tyOxRnml)... ...Current group memberships... ...Authenticated Users... ...Group 2... ...Assign to groups... ...Administrators... ...Group 1... ...Reviewers...' Check to make sure search results are ordered properly and display the title/fullname and id >>> self.browser.open('http://nohost/plone/@@usergroup-groupprefs') >>> self.browser.getLink('Group 1 (group1)').click() >>> self.browser.getControl(name='form.button.FindAll').click() >>> self.browser.contents '...Current group members... ...Blake Jenkins...(BlXLQh7r)... ...Search for new group members... ...Administrators...(Administrators)... ...Group 2...(group2)... ...Reviewers...(Reviewers)... ...Abigail Simmons...(XYsmd7ux)... ...Alexandra Nelson...(FElYwiIr)...' Add some group members >>> self.browser.getControl(name='add:list').getControl(value='group2').selected = True >>> self.browser.getControl(name='add:list').getControl(value='Reviewers').selected = True >>> self.browser.getControl(name='add:list').getControl(value='XYsmd7ux').selected = True >>> self.browser.getControl(name='form.button.Add').click() These should be displayed in the Current group members section now. >>> self.browser.contents '...Current group members... ...Group 2...(group2)... ...Reviewers...(Reviewers)... ...Abigail Simmons...(XYsmd7ux)... ...Blake Jenkins...(BlXLQh7r)... ...Search for new group members...' Users/Groups they can be removed from this list as well. >>> self.browser.getControl(name='delete:list').getControl(value='XYsmd7ux').selected = True >>> self.browser.getControl(name='form.button.Edit').click() >>> 'Changes made' in self.browser.contents True >>> 'Abigail Simmons' in self.browser.contents False Groups nested within groups assigned to this one should not be displayed >>> self.browser.getLink('Group 2').click() >>> self.browser.getLink('Group Members').click() Open the groups overview, make sure Group 2 doesn't have a globally-assigned contributor role >>> self.browser.open('http://nohost/plone/@@usergroup-groupprefs') >>> self.browser.getControl(name='group_group1:list', index=1).getControl(value='Contributor').selected True >>> self.browser.getControl(name='group_group2:list', index=1).getControl(value='Contributor').selected Traceback (most recent call last): ... LookupError: value 'Contributor' But the nested group (Group 2) should show it as an inherited global role >>> self.browser.getControl(name='group_group2:list', index=1).getControl(value='Contributor') Traceback (most recent call last): ... LookupError: value 'Contributor' Even when explicitly giving the nested group (Group 2) the contributor role, it should still show it as an inherited global role. >>> self.portal.portal_groups.editGroup('group2', roles=['Contributor'], groups=()) >>> self.browser.open('http://nohost/plone/@@usergroup-groupprefs') >>> self.browser.getControl(name='group_group2:list', index=1).getControl(value='Contributor') Traceback (most recent call last): ... LookupError: value 'Contributor'