class TestCSRF(unittest.TestCase): layer = PROTECT_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer['portal'] self.browser = Browser(self.layer['app']) self.request = self.layer['request'] self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_change_password_on_root_does_not_throw_other_csrf_protection( self ): self.browser.open( '%s/acl_users/users/manage_users?user_id=%s&passwd=1' % ( self.layer['app'].absolute_url(), SITE_OWNER_NAME ) ) self.browser.getControl(name='password').value = SITE_OWNER_PASSWORD self.browser.getControl(name='confirm').value = SITE_OWNER_PASSWORD self.browser.getForm(action='manage_updateUserPassword').submit() self.assertEquals( self.browser.url, '%s/acl_users/users/manage_users?' 'manage_tabs_message=password+updated' % ( self.layer['app'].absolute_url() ) )
def get_browser(self, logged_in=False, credentials={}): """Return a browser, potentially a logged in one. The default credentials are the admin ones """ commit() browser = Browser(self.app) if logged_in or credentials: username = credentials.get("username", self._default_credentials["username"]) password = credentials.get("password", self._default_credentials["password"]) browser.open("%s/@@login" % self.portal.absolute_url()) browser.getControl(name="__ac_name").value = username browser.getControl(name="__ac_password").value = password browser.getForm(id="loginForm").submit() return browser
class AutoCSRFProtectTests(unittest.TestCase, _BaseAutoTest): def setUp(self): self.portal = self.layer['portal'] self.browser = Browser(self.layer['app']) self.request = self.layer['request'] login(self.portal, TEST_USER_NAME) self.browser.open(self.portal.absolute_url() + '/login_form') self.browser.getControl(name='__ac_name').value = TEST_USER_NAME self.browser.getControl( name='__ac_password' ).value = TEST_USER_PASSWORD self.browser.getControl('Log in').click() def open(self, path): self.browser.open(self.portal.absolute_url() + '/' + path) def test_CSRF_header(self): self.request.environ['HTTP_X_CSRF_TOKEN'] = createToken() view = AuthenticatorView(None, self.request) self.assertEqual(view.verify(), True) def test_incorrect_CSRF_header(self): self.request.environ['HTTP_X_CSRF_TOKEN'] = 'foobar' view = AuthenticatorView(None, self.request) self.assertEqual(view.verify(), False) def test_only_add_auth_when_user_logged_in(self): logout() self.open('logout') self.open('test-unprotected') try: self.browser.getForm('one').getControl(name="_authenticator") self.assertEqual('anonymous should not be protected', '') except LookupError: pass
class UserGroupsControlPanelFunctionalTest(unittest.TestCase): """Test that changes in the user groups control panel are actually creating and changing users and groups. """ layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING def _generateGroups(self): groupsTool = getToolByName(self.portal, 'portal_groups') self.groups = [{ 'id': 'group1', 'title': "Group 1" }, { 'id': 'group2', 'title': "Group 2" }, { 'id': 'group3', 'title': "Group 3 accentué" }] for group in self.groups: groupsTool.addGroup(group['id'], [], [], title=group['title']) def _generateUsers(self): self.members = [ { 'username': '******', 'fullname': 'Kevin Hughes', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Richard Ramirez', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Kyle Brown', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Julian Green', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Makayla Coleman', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Sean Foster', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Molly Martin', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Jordan Thompson', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Tyler Rivera', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Megan Murphy', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Gracie Diaz', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Rachel Morgan', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Maya Price', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Blake Jenkins', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Owen Ramirez', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Owen Cook', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Jayden Hill', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Joseph Ramirez', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Nathan Young', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Kaitlyn Hernandez', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Faith Price', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Sofia Williams', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'David Sanders', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Jack Simmons', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Cole Howard', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Rachel Miller', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Henry Patterson', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Avery Cooper', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Sydney Bennett', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Daniel Johnson', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Autumn Brooks', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Alexandra Nelson', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Brian Simmons', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Kevin Hughes', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Sydney Evans', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Emma Brown', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Lauren Martin', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Isabelle Russell', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Anna Baker', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Brady Watson', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Kaitlyn Robinson', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Riley Richardson', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Kayla Sanders', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Sara Richardson', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Trinity Gonzales', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Madeline Garcia', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Brian Gray', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Victoria Perez', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Charles Rodriguez', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Abigail Simmons', 'email': '*****@*****.**' }, { 'username': '******', 'fullname': 'Émilie Richard', 'email': '*****@*****.**' }, ] rtool = getToolByName(self.portal, 'portal_registration') for member in self.members: rtool.addMember(member['username'], 'somepassword', properties=member) def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.usergroups_url = "%s/@@usergroup-userprefs" % self.portal_url self.groups_url = "%s/@@usergroup-groupprefs" % self.portal_url self._generateGroups() self._generateUsers() transaction.commit() self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_usergroups_control_panel_link(self): self.browser.open("%s/@@overview-controlpanel" % self.portal_url) self.browser.getLink('Users and Groups').click() self.assertEqual(self.browser.url, self.usergroups_url) def test_usergroups_groups_link(self): self.browser.open(self.usergroups_url) self.browser.getLink('Groups', index=0).click() self.assertEqual(self.browser.url, "%s/@@usergroup-groupprefs" % self.portal_url) def test_usergroups_settings_link(self): self.browser.open(self.usergroups_url) self.browser.getLink('Settings').click() self.assertEqual(self.browser.url, "%s/@@usergroup-controlpanel" % self.portal_url) def test_usergroups_memberfields_link(self): self.browser.open(self.usergroups_url) self.browser.getLink('Member fields').click() self.assertEqual(self.browser.url, "%s/@@member-fields" % self.portal_url) def test_user_search_by_name(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'Richard' self.browser.getControl(name='form.button.Search').click() self.assertIn('Richard Ramirez', self.browser.contents) self.assertIn('Sara Richardson', self.browser.contents) self.assertIn('Émilie Richard', self.browser.contents) def test_user_search_by_name_accent(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'Émilie' self.browser.getControl(name='form.button.Search').click() self.assertIn('Émilie Richard', self.browser.contents) def test_user_search_by_id(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.assertIn('Autumn Brooks', self.browser.contents) def test_user_search_by_mail(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'DohPmgIa@' self.browser.getControl(name='form.button.Search').click() self.assertIn('Gracie Diaz', self.browser.contents) def test_user_show_all(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='form.button.FindAll').click() # Check that first 10 members (sorted by fullname) are shown. for member in sorted( self.members, key=lambda k: normalizeString(k['fullname']))[:10]: self.assertIn(member['fullname'], self.browser.contents) def test_user_show_all_with_search_term(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'no-user' self.browser.getControl(name='form.button.FindAll').click() # Check that all members is shown and search term is ignored self.assertIn('Avery Cooper', self.browser.contents) def test_user_add_new_link(self): self.browser.open(self.usergroups_url) self.browser.getLink(id='add-user').click() self.assertEqual(self.browser.url, "%s/@@new-user" % self.portal_url) def test_user_modify_roles(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() # Check that contributor role is not enabled and enable it self.assertFalse( self.browser.getControl( name='users.roles:list:records').getControl( value='Contributor').selected) self.browser.getControl(name='users.roles:list:records').getControl( value='Contributor').selected = True self.browser.getControl(name='form.button.Modify').click() # Check that contributor role is now enabled for this user self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.assertTrue( self.browser.getControl( name='users.roles:list:records').getControl( value='Contributor').selected) def test_user_delete(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.assertIn('Autumn Brooks', self.browser.contents) # Delete user self.browser.getControl(name='delete:list').getControl( value='TWrMCLIo').selected = True self.browser.getControl(name='form.button.Modify').click() # Check that user does not exist anymore self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.assertNotIn('Autumn Brooks', self.browser.contents) def test_groups_search_by_id(self): self.browser.open(self.groups_url) self.browser.getControl(name='searchstring').value = 'group1' self.browser.getControl(name='form.button.Search').click() self.assertIn('Group 1', self.browser.contents) def test_groups_search_by_name(self): self.browser.open(self.groups_url) self.browser.getControl(name='searchstring').value = 'Group 3 accentué' self.browser.getControl(name='form.button.Search').click() self.assertIn('Group 3 accentué', self.browser.contents) def test_groups_modify_roles(self): self.browser.open(self.groups_url) self.browser.getControl(name='searchstring').value = 'group1' # Check that role is not selected yet and then select it and apply it. form = self.browser.getForm(id='groups_search') ctrls = form._form.fields.get('group_group1:list') roles = [ctrl._value for ctrl in ctrls] expected = 'Site Administrator' self.assertIn(expected, roles) idx = roles.index(expected) self.assertFalse(ctrls[idx].checked) ctrls[idx].checked = True self.browser.getControl('Save').click() # Check that role is now selected form = self.browser.getForm(id='groups_search') ctrl = form._form.get('group_group1:list', index=idx) self.assertEqual(ctrl._value, expected) self.assertTrue(ctrl.checked) def test_groups_delete_group(self): self.browser.open(self.groups_url) self.browser.getControl(name='searchstring').value = 'group1' # Delete a group self.browser.getControl(name='delete:list').getControl( value='group1').selected = True self.browser.getControl(name='form.button.Modify').click() # Check that group doesn't exist anymore self.browser.getControl(name='searchstring').value = 'group1' self.assertNotIn('Group 1', self.browser.contents) def test_groups_show_all(self): self.browser.open(self.groups_url) self.browser.getControl(name='form.button.FindAll').click() for group in self.groups: self.assertIn(group['title'], self.browser.contents) def test_group_add_users(self): self.browser.open(self.groups_url) self.browser.getLink('Group 1 (group1)').click() self.assertIn('There is no group or user attached to this group.', self.browser.contents) # Add user (Autumn Brooks) to selected group (Group 1) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.browser.getControl(name='add:list').getControl( value='TWrMCLIo').selected = True # Check that user is now part of the group self.browser.getControl( 'Add selected groups and users to this group').click() self.assertIn('Autumn Brooks', self.browser.contents) def test_group_add_group(self): self.browser.open(self.groups_url) self.browser.getLink('Group 1 (group1)').click() self.assertIn('There is no group or user attached to this group.', self.browser.contents) # Add group2 to selected group 1 self.browser.getControl(name='searchstring').value = 'group2' self.browser.getControl(name='form.button.Search').click() self.browser.getControl(name='add:list').getControl( value='group2').selected = True # Check that group is now part of the group self.browser.getControl( 'Add selected groups and users to this group').click() self.assertIn('Group 2', self.browser.contents) # Check that you can still add a user too. This failed at some point: # https://github.com/plone/Products.CMFPlone/issues/3048 # Add user (Autumn Brooks) to selected group (Group 1) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.browser.getControl(name='add:list').getControl( value='TWrMCLIo').selected = True self.browser.getControl( 'Add selected groups and users to this group').click() # Check that both group and user are now part of the group self.browser.open(self.groups_url) self.browser.getLink('Group 1 (group1)').click() self.assertIn('Autumn Brooks', self.browser.contents) self.assertIn('Group 2', self.browser.contents) def test_usergroups_settings_many_users(self): self.browser.open("%s/@@usergroup-controlpanel" % self.portal_url) self.browser.getControl( name='form.widgets.many_users:list').controls[0].selected = True self.browser.getControl('Save').click() # Check that show all button for users is no longer available self.browser.open(self.usergroups_url) self.assertNotIn('Show all', self.browser.contents) # Check that empty search does not trigger show all self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = '' def test_usergroups_settings_many_groups(self): self.browser.open("%s/@@usergroup-controlpanel" % self.portal_url) self.browser.getControl( name='form.widgets.many_groups:list').controls[0].selected = True self.browser.getControl('Save').click() # Check that show all button for groups is no longer available self.browser.open(self.groups_url) self.assertNotIn('Show all', self.browser.contents) self.assertNotIn('DIispfuF', self.browser.contents)
class LanguageControlPanelFunctionalTest(unittest.TestCase): """Test that changes in the language control panel are actually stored in the registry. """ layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def _inject_available_languages_field(self, value): """The in-and-out widget does not work without javascript, therefore we have to inject some values in order to make saving the form work. """ form = self.browser.getForm(id='LanguageControlPanel') name = 'form.widgets.available_languages:list' field = webtest.forms.Hidden(form._form, 'input', name, 0, value=value) form._form.field_order.append((name, field)) self.browser.getControl('Save').click() def test_language_control_panel_link(self): self.browser.open("%s/@@overview-controlpanel" % self.portal_url) self.browser.getLink('Language').click() self.assertTrue("Language Settings" in self.browser.contents) def test_language_control_panel_backlink(self): self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertTrue("General" in self.browser.contents) def test_language_control_panel_sidebar(self): self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.browser.getLink('Site Setup').click() self.assertTrue( self.browser.url.endswith('/plone/@@overview-controlpanel')) def test_language_controlpanel_view(self): view = getMultiAdapter((self.portal, self.portal.REQUEST), name="language-controlpanel") self.assertTrue(view()) def test_default_language(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.default_language, 'en') self.assertEqual( self.browser.getControl('Site language').value, ['en']) self.browser.getControl('Site language').value = ['de'] self._inject_available_languages_field('en') self._inject_available_languages_field('de') self.browser.getControl(name='form.buttons.save').click() self.assertEqual(settings.default_language, 'de') # def test_available_languages(self): # registry = getUtility(IRegistry) # settings = registry.forInterface(ILanguageSchema, prefix='plone') # self.browser.open( # "%s/@@language-controlpanel" % self.portal_url) # self.assertEqual(settings.available_languages, ['en']) # self.assertEqual( # self.browser.getControl( # name='form.widgets.available_languages.to' # ).options, # ['en'] # ) # control = self.browser.getForm(index=1) # self.in_out_select( # control, 'form.widgets.available_languages:list', 'Deutsch') # self.browser.getControl('Save').click() # self.assertEqual(settings.available_languages, ['en', 'de']) def test_use_combined_language_codes(self): """This checks swithing combined languages codes support off/on.""" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_combined_language_codes, True) self.assertEqual( self.browser.getControl( 'Show country-specific language variants').selected, True) self.browser.getControl( 'Show country-specific language variants').selected = False self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_combined_language_codes, False) def test_display_flags(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.display_flags, False) self.assertEqual( self.browser.getControl('Show language flags').selected, False) self.browser.getControl('Show language flags').selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.display_flags, True) def test_use_content_negotiation(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_content_negotiation, False) self.assertEqual( self.browser.getControl( 'Use the language of the content item').selected, False) self.browser.getControl( 'Use the language of the content item').selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_content_negotiation, True) def test_use_path_negotiation(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_path_negotiation, False) self.assertEqual( self.browser.getControl( 'Use language codes in URL path for manual override').selected, False) self.browser.getControl( 'Use language codes in URL path for manual override' ).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_path_negotiation, True) def test_use_cookie_negotiation(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_cookie_negotiation, False) self.assertEqual( self.browser.getControl('Use cookie for manual override').selected, False) self.browser.getControl( 'Use cookie for manual override').selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_cookie_negotiation, True) def test_authenticated_users_only(self): control_label = "Authenticated users only" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.authenticated_users_only, False) self.assertEqual( self.browser.getControl(control_label).selected, False) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.authenticated_users_only, True) def test_set_cookie_always(self): control_label = "Set the language cookie always" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.set_cookie_always, False) self.assertEqual( self.browser.getControl(control_label).selected, False) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.set_cookie_always, True) def test_use_subdomain_negotiation(self): control_label = "Use subdomain" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_subdomain_negotiation, False) self.assertEqual( self.browser.getControl(control_label).selected, False) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_subdomain_negotiation, True) def test_use_cctld_negotiation(self): control_label = "Use top-level domain" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_cctld_negotiation, False) self.assertEqual( self.browser.getControl(control_label).selected, False) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_cctld_negotiation, True) def test_use_request_negotiation(self): control_label = "Use browser language request negotiation" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open("%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_request_negotiation, False) self.assertEqual( self.browser.getControl(control_label).selected, False) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_request_negotiation, True)
class LanguageControlPanelFunctionalTest(unittest.TestCase): """Test that changes in the language control panel are actually stored in the registry. """ layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def _inject_available_languages_field(self, value): """The in-and-out widget does not work without javascript, therefore we have to inject some values in order to make saving the form work. """ form = self.browser.getForm(id='LanguageControlPanel') name = 'form.widgets.available_languages:list' field = webtest.forms.Hidden(form._form, 'input', name, 0, value=value) form._form.field_order.append((name, field)) self.browser.getControl('Save').click() def test_language_control_panel_link(self): self.browser.open( "%s/@@overview-controlpanel" % self.portal_url) self.browser.getLink('Language').click() self.assertTrue("Language Settings" in self.browser.contents) def test_language_control_panel_backlink(self): self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertTrue("General" in self.browser.contents) def test_language_control_panel_sidebar(self): self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.browser.getLink('Site Setup').click() self.assertTrue( self.browser.url.endswith('/plone/@@overview-controlpanel') ) def test_language_controlpanel_view(self): view = getMultiAdapter((self.portal, self.portal.REQUEST), name="language-controlpanel") self.assertTrue(view()) def test_default_language(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.default_language, 'en') self.assertEqual( self.browser.getControl( 'Site language' ).value, ['en'] ) self.browser.getControl( 'Site language' ).value = ['de'] self._inject_available_languages_field('en') self._inject_available_languages_field('de') self.browser.getControl(name='form.buttons.save').click() self.assertEqual(settings.default_language, 'de') # def test_available_languages(self): # registry = getUtility(IRegistry) # settings = registry.forInterface(ILanguageSchema, prefix='plone') # self.browser.open( # "%s/@@language-controlpanel" % self.portal_url) # self.assertEqual(settings.available_languages, ['en']) # self.assertEqual( # self.browser.getControl( # name='form.widgets.available_languages.to' # ).options, # ['en'] # ) # control = self.browser.getForm(index=1) # self.in_out_select( # control, 'form.widgets.available_languages:list', 'Deutsch') # self.browser.getControl('Save').click() # self.assertEqual(settings.available_languages, ['en', 'de']) def test_use_combined_language_codes(self): """This checks swithing combined languages codes support off/on.""" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_combined_language_codes, True) self.assertEqual( self.browser.getControl( 'Show country-specific language variants' ).selected, True ) self.browser.getControl( 'Show country-specific language variants' ).selected = False self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_combined_language_codes, False) def test_display_flags(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.display_flags, False) self.assertEqual( self.browser.getControl( 'Show language flags' ).selected, False ) self.browser.getControl( 'Show language flags' ).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.display_flags, True) def test_use_content_negotiation(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_content_negotiation, False) self.assertEqual( self.browser.getControl( 'Use the language of the content item' ).selected, False ) self.browser.getControl( 'Use the language of the content item' ).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_content_negotiation, True) def test_use_path_negotiation(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_path_negotiation, False) self.assertEqual( self.browser.getControl( 'Use language codes in URL path for manual override' ).selected, False ) self.browser.getControl( 'Use language codes in URL path for manual override' ).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_path_negotiation, True) def test_use_cookie_negotiation(self): registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_cookie_negotiation, False) self.assertEqual( self.browser.getControl( 'Use cookie for manual override' ).selected, False ) self.browser.getControl( 'Use cookie for manual override' ).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_cookie_negotiation, True) def test_authenticated_users_only(self): control_label = "Authenticated users only" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.authenticated_users_only, False) self.assertEqual( self.browser.getControl(control_label).selected, False ) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.authenticated_users_only, True) def test_set_cookie_always(self): control_label = "Set the language cookie always" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.set_cookie_always, False) self.assertEqual( self.browser.getControl(control_label).selected, False ) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.set_cookie_always, True) def test_use_subdomain_negotiation(self): control_label = "Use subdomain" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_subdomain_negotiation, False) self.assertEqual( self.browser.getControl(control_label).selected, False ) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_subdomain_negotiation, True) def test_use_cctld_negotiation(self): control_label = "Use top-level domain" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_cctld_negotiation, False) self.assertEqual( self.browser.getControl(control_label).selected, False ) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_cctld_negotiation, True) def test_use_request_negotiation(self): control_label = "Use browser language request negotiation" registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') self.browser.open( "%s/@@language-controlpanel" % self.portal_url) self.assertEqual(settings.use_request_negotiation, False) self.assertEqual( self.browser.getControl(control_label).selected, False ) self.browser.getControl(control_label).selected = True self._inject_available_languages_field('en') self.browser.getControl('Save').click() self.assertEqual(settings.use_request_negotiation, True)
class TypesControlPanelFunctionalTest(unittest.TestCase): """Test that changes in the types control panel are actually stored in the registry. """ layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.types_url = "%s/@@content-controlpanel" % self.portal_url self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, )) def test_types_control_panel_link(self): self.browser.open("%s/@@overview-controlpanel" % self.portal_url) self.browser.getLink('Editing').click() def test_standard_type_select(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.assertIn('content-controlpanel', self.browser.url) def test_standard_type_cancel(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getControl('Cancel').click() self.assertIn('@@overview-controlpanel', self.browser.url) def test_standard_type_allow_commenting(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl('Allow comments').selected = True self.browser.getControl('Save').click() # Check if settings got saved correctly self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.assertIn('Globally addable', self.browser.contents) self.assertIn('Allow comments', self.browser.contents) self.assertEqual( self.browser.getControl('Allow comments').selected, True) self.assertIn('Visible in searches', self.browser.contents) self.assertIn( '<input id="redirect_links" type="checkbox" class="noborder"' ' name="redirect_links:boolean" checked="checked" />', self.browser.contents) self.assertIn( '<label for="redirect_links">Redirect immediately to link target', self.browser.contents) def test_standard_types_redirect_links(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl( 'Redirect immediately to link target').selected = True self.browser.getControl('Save').click() # Check if settings got saved correctly self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.assertTrue( 'Redirect immediately to link target' in self.browser.contents) self.assertEqual( self.browser.getControl( 'Redirect immediately to link target').selected, True) def test_set_no_default_workflow(self): # references http://dev.plone.org/plone/ticket/11901 self.browser.open(self.types_url) self.browser.getControl(name="new_workflow").value = ['[none]'] self.browser.getControl(name="form.button.Save").click() # Check that setting No workflow as default workflow doesn't break # break editing types self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.assertIn('Globally addable', self.browser.contents) self.assertIn('Allow comments', self.browser.contents) self.assertIn('Visible in searches', self.browser.contents) def test_disable_versioning_removes_behavior(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Document'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl(name='versionpolicy').value = ['off'] self.browser.getForm(action=self.types_url).submit() portal_types = self.portal.portal_types doc_type = portal_types.Document self.assertTrue('plone.app.versioningbehavior.behaviors.IVersionable' not in doc_type.behaviors) # noqa def test_enable_versioning_behavior_on_document(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Document'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl(name='versionpolicy').value = ['off'] self.browser.getForm(action=self.types_url).submit() portal_types = self.portal.portal_types doc_type = portal_types.Document self.assertTrue('plone.app.versioningbehavior.behaviors.IVersionable' not in doc_type.behaviors) # noqa self.browser.getControl(name='versionpolicy').value = ['manual'] self.browser.getForm(action=self.types_url).submit() self.assertTrue('plone.app.versioningbehavior.behaviors.IVersionable' in doc_type.behaviors) def test_enable_versioning_behavior_on_file(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['File'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl(name='versionpolicy').value = ['off'] self.browser.getForm(action=self.types_url).submit() portal_types = self.portal.portal_types file_type = portal_types.File # File has no Versioning and no Locking on default, but needs it self.assertTrue('plone.app.versioningbehavior.behaviors.IVersionable' not in file_type.behaviors) # noqa self.assertTrue('plone.app.lockingbehavior.behaviors.ILocking' not in file_type.behaviors) # noqa self.browser.getControl(name='versionpolicy').value = ['manual'] self.browser.getForm(action=self.types_url).submit() self.assertTrue('plone.app.versioningbehavior.behaviors.IVersionable' in file_type.behaviors) self.assertTrue('plone.app.lockingbehavior.behaviors.ILocking' in file_type.behaviors)
class UserGroupsControlPanelFunctionalTest(unittest.TestCase): """Test that changes in the user groups control panel are actually creating and changing users and groups. """ layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING def _generateGroups(self): groupsTool = getToolByName(self.portal, 'portal_groups') self.groups = [ {'id': 'group1', 'title': "Group 1"}, {'id': 'group2', 'title': "Group 2"}, {'id': 'group3', 'title': "Group 3 accentué"} ] for group in self.groups: groupsTool.addGroup(group['id'], [], [], title=group['title']) def _generateUsers(self): self.members = [ {'username': '******', 'fullname': 'Kevin Hughes', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Richard Ramirez', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Kyle Brown', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Julian Green', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Makayla Coleman', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Sean Foster', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Molly Martin', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Jordan Thompson', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Tyler Rivera', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Megan Murphy', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Gracie Diaz', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Rachel Morgan', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Maya Price', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Blake Jenkins', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Owen Ramirez', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Owen Cook', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Jayden Hill', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Joseph Ramirez', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Nathan Young', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Kaitlyn Hernandez', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Faith Price', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Sofia Williams', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'David Sanders', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Jack Simmons', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Cole Howard', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Rachel Miller', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Henry Patterson', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Avery Cooper', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Sydney Bennett', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Daniel Johnson', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Autumn Brooks', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Alexandra Nelson', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Brian Simmons', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Kevin Hughes', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Sydney Evans', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Emma Brown', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Lauren Martin', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Isabelle Russell', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Anna Baker', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Brady Watson', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Kaitlyn Robinson', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Riley Richardson', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Kayla Sanders', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Sara Richardson', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Trinity Gonzales', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Madeline Garcia', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Brian Gray', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Victoria Perez', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Charles Rodriguez', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Abigail Simmons', 'email': '*****@*****.**'}, {'username': '******', 'fullname': 'Émilie Richard', 'email': '*****@*****.**'}, ] rtool = getToolByName(self.portal, 'portal_registration') for member in self.members: rtool.addMember(member['username'], 'somepassword', properties=member) def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.usergroups_url = "%s/@@usergroup-userprefs" % self.portal_url self.groups_url = "%s/@@usergroup-groupprefs" % self.portal_url self._generateGroups() self._generateUsers() transaction.commit() self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_usergroups_control_panel_link(self): self.browser.open( "%s/@@overview-controlpanel" % self.portal_url) self.browser.getLink('Users and Groups').click() self.assertEqual( self.browser.url, self.usergroups_url ) def test_usergroups_groups_link(self): self.browser.open(self.usergroups_url) self.browser.getLink('Groups', index=0).click() self.assertEqual( self.browser.url, "%s/@@usergroup-groupprefs" % self.portal_url ) def test_usergroups_settings_link(self): self.browser.open(self.usergroups_url) self.browser.getLink('Settings').click() self.assertEqual( self.browser.url, "%s/@@usergroup-controlpanel" % self.portal_url ) def test_usergroups_memberfields_link(self): self.browser.open(self.usergroups_url) self.browser.getLink('Member fields').click() self.assertEqual( self.browser.url, "%s/@@member-fields" % self.portal_url ) def test_user_search_by_name(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'Richard' self.browser.getControl(name='form.button.Search').click() self.assertIn('Richard Ramirez', self.browser.contents) self.assertIn('Sara Richardson', self.browser.contents) self.assertIn('Émilie Richard', self.browser.contents) def test_user_search_by_name_accent(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'Émilie' self.browser.getControl(name='form.button.Search').click() self.assertIn('Émilie Richard', self.browser.contents) def test_user_search_by_id(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.assertIn('Autumn Brooks', self.browser.contents) def test_user_search_by_mail(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'DohPmgIa@' self.browser.getControl(name='form.button.Search').click() self.assertIn('Gracie Diaz', self.browser.contents) def test_user_show_all(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='form.button.FindAll').click() # Check that first 10 members (sorted by fullname) are shown. for member in sorted( self.members, key=lambda k: normalizeString(k['fullname']) )[:10]: self.assertIn(member['fullname'], self.browser.contents) def test_user_show_all_with_search_term(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'no-user' self.browser.getControl(name='form.button.FindAll').click() # Check that all members is shown and search term is ignored self.assertIn('Avery Cooper', self.browser.contents) def test_user_add_new_link(self): self.browser.open(self.usergroups_url) self.browser.getLink(id='add-user').click() self.assertEqual( self.browser.url, "%s/@@new-user" % self.portal_url ) def test_user_modify_roles(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() # Check that contributor role is not enabled and enable it self.assertFalse(self.browser.getControl( name='users.roles:list:records' ).getControl(value='Contributor').selected) self.browser.getControl( name='users.roles:list:records' ).getControl(value='Contributor').selected = True self.browser.getControl(name='form.button.Modify').click() # Check that contributor role is now enabled for this user self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.assertTrue(self.browser.getControl( name='users.roles:list:records' ).getControl(value='Contributor').selected) def test_user_delete(self): self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.assertIn('Autumn Brooks', self.browser.contents) # Delete user self.browser.getControl(name='delete:list').getControl( value='TWrMCLIo').selected = True self.browser.getControl(name='form.button.Modify').click() # Check that user does not exist anymore self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.assertNotIn('Autumn Brooks', self.browser.contents) def test_groups_search_by_id(self): self.browser.open(self.groups_url) self.browser.getControl(name='searchstring').value = 'group1' self.browser.getControl(name='form.button.Search').click() self.assertIn('Group 1', self.browser.contents) def test_groups_search_by_name(self): self.browser.open(self.groups_url) self.browser.getControl(name='searchstring').value = 'Group 3 accentué' self.browser.getControl(name='form.button.Search').click() self.assertIn('Group 3 accentué', self.browser.contents) def test_groups_modify_roles(self): self.browser.open(self.groups_url) self.browser.getControl(name='searchstring').value = 'group1' # Check that role is not selected yet and then select it and apply it. form = self.browser.getForm(id='groups_search') ctrls = form._form.fields.get('group_group1:list') roles = [ctrl._value for ctrl in ctrls] expected = 'Site Administrator' self.assertIn(expected, roles) idx = roles.index(expected) self.assertFalse(ctrls[idx].checked) ctrls[idx].checked = True self.browser.getControl('Save').click() # Check that role is now selected form = self.browser.getForm(id='groups_search') ctrl = form._form.get('group_group1:list', index=idx) self.assertEqual(ctrl._value, expected) self.assertTrue(ctrl.checked) def test_groups_delete_group(self): self.browser.open(self.groups_url) self.browser.getControl(name='searchstring').value = 'group1' # Delete a group self.browser.getControl( name='delete:list' ).getControl(value='group1').selected = True self.browser.getControl(name='form.button.Modify').click() # Check that group doesn't exist anymore self.browser.getControl(name='searchstring').value = 'group1' self.assertNotIn('Group 1', self.browser.contents) def test_groups_show_all(self): self.browser.open(self.groups_url) self.browser.getControl(name='form.button.FindAll').click() for group in self.groups: self.assertIn(group['title'], self.browser.contents) def test_group_add_users(self): self.browser.open(self.groups_url) self.browser.getLink('Group 1 (group1)').click() self.assertIn( 'There is no group or user attached to this group.', self.browser.contents ) # Add user (Autumn Brooks) to selected group (Group 1) self.browser.getControl(name='searchstring').value = 'TWrMCLIo' self.browser.getControl(name='form.button.Search').click() self.browser.getControl(name='add:list').getControl( value='TWrMCLIo').selected = True # Check that user is now part of the group self.browser.getControl( 'Add selected groups and users to this group').click() self.assertIn('Autumn Brooks', self.browser.contents) def test_group_add_group(self): self.browser.open(self.groups_url) self.browser.getLink('Group 1 (group1)').click() self.assertIn( 'There is no group or user attached to this group.', self.browser.contents ) # Add group2 to selected group 1 self.browser.getControl(name='searchstring').value = 'group2' self.browser.getControl(name='form.button.Search').click() self.browser.getControl(name='add:list').getControl( value='group2').selected = True # Check that group is now part of the group self.browser.getControl( 'Add selected groups and users to this group').click() self.assertIn('Group 2', self.browser.contents) def test_usergroups_settings_many_users(self): self.browser.open("%s/@@usergroup-controlpanel" % self.portal_url) self.browser.getControl( name='form.widgets.many_users:list' ).controls[0].selected = True self.browser.getControl('Save').click() # Check that show all button for users is no longer available self.browser.open(self.usergroups_url) self.assertNotIn('Show all', self.browser.contents) # Check that empty search does not trigger show all self.browser.open(self.usergroups_url) self.browser.getControl(name='searchstring').value = '' def test_usergroups_settings_many_groups(self): self.browser.open("%s/@@usergroup-controlpanel" % self.portal_url) self.browser.getControl( name='form.widgets.many_groups:list' ).controls[0].selected = True self.browser.getControl('Save').click() # Check that show all button for groups is no longer available self.browser.open(self.groups_url) self.assertNotIn('Show all', self.browser.contents) self.assertNotIn('DIispfuF', self.browser.contents)
class TypesControlPanelFunctionalTest(unittest.TestCase): """Test that changes in the types control panel are actually stored in the registry. """ layer = PRODUCTS_CMFPLONE_FUNCTIONAL_TESTING def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.portal_url = self.portal.absolute_url() self.types_url = "%s/@@content-controlpanel" % self.portal_url self.browser = Browser(self.app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) def test_types_control_panel_link(self): self.browser.open( "%s/@@overview-controlpanel" % self.portal_url) self.browser.getLink('Editing').click() def test_standard_type_select(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.assertIn('content-controlpanel', self.browser.url) def test_standard_type_cancel(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getControl('Cancel').click() self.assertIn('@@overview-controlpanel', self.browser.url) def test_standard_type_allow_commenting(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl('Allow comments').selected = True self.browser.getControl('Save').click() # Check if settings got saved correctly self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.assertIn('Globally addable', self.browser.contents) self.assertIn('Allow comments', self.browser.contents) self.assertEqual( self.browser.getControl('Allow comments').selected, True ) self.assertIn('Visible in searches', self.browser.contents) self.assertIn( '<input id="redirect_links" type="checkbox" class="noborder"' ' name="redirect_links:boolean" checked="checked" />', self.browser.contents) self.assertIn( '<label for="redirect_links">Redirect immediately to link target', self.browser.contents ) def test_standard_types_redirect_links(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl( 'Redirect immediately to link target' ).selected = True self.browser.getControl('Save').click() # Check if settings got saved correctly self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.assertTrue( 'Redirect immediately to link target' in self.browser.contents ) self.assertEqual( self.browser.getControl( 'Redirect immediately to link target').selected, True ) def test_set_no_default_workflow(self): # references http://dev.plone.org/plone/ticket/11901 self.browser.open(self.types_url) self.browser.getControl(name="new_workflow").value = ['[none]'] self.browser.getControl(name="form.button.Save").click() # Check that setting No workflow as default workflow doesn't break # break editing types self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Link'] self.browser.getForm(action=self.types_url).submit() self.assertIn('Globally addable', self.browser.contents) self.assertIn('Allow comments', self.browser.contents) self.assertIn('Visible in searches', self.browser.contents) def test_disable_versioning_removes_behavior(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Document'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl(name='versionpolicy').value = ['off'] self.browser.getForm(action=self.types_url).submit() portal_types = self.portal.portal_types doc_type = portal_types.Document self.assertTrue( 'plone.app.versioningbehavior.behaviors.IVersionable' not in doc_type.behaviors) # noqa def test_enable_versioning_behavior_on_document(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['Document'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl(name='versionpolicy').value = ['off'] self.browser.getForm(action=self.types_url).submit() portal_types = self.portal.portal_types doc_type = portal_types.Document self.assertTrue( 'plone.app.versioningbehavior.behaviors.IVersionable' not in doc_type.behaviors) # noqa self.browser.getControl(name='versionpolicy').value = ['manual'] self.browser.getForm(action=self.types_url).submit() self.assertTrue( 'plone.app.versioningbehavior.behaviors.IVersionable' in doc_type.behaviors) def test_enable_versioning_behavior_on_file(self): self.browser.open(self.types_url) self.browser.getControl(name='type_id').value = ['File'] self.browser.getForm(action=self.types_url).submit() self.browser.getControl(name='versionpolicy').value = ['off'] self.browser.getForm(action=self.types_url).submit() portal_types = self.portal.portal_types file_type = portal_types.File # File has no Versioning and no Locking on default, but needs it self.assertTrue( 'plone.app.versioningbehavior.behaviors.IVersionable' not in file_type.behaviors) # noqa self.assertTrue( 'plone.app.lockingbehavior.behaviors.ILocking' not in file_type.behaviors) # noqa self.browser.getControl(name='versionpolicy').value = ['manual'] self.browser.getForm(action=self.types_url).submit() self.assertTrue( 'plone.app.versioningbehavior.behaviors.IVersionable' in file_type.behaviors) self.assertTrue( 'plone.app.lockingbehavior.behaviors.ILocking' in file_type.behaviors)
def testNoKey(self): browser = Browser(self.layer["app"]) browser.open("%s/reset-password" % self.layer["portal"].absolute_url()) browser.getForm("form").submit()