def test_bc_navigationroot(self): makeContent(self.portal.folder1, portal_type='Document', id='page1') page = self.portal.folder1.page1 browser = Browser() data = { 'fieldName': 'relatedItems', 'fieldRealName': 'relatedItems', 'at_url': page.absolute_url(1)} basic = '%s:%s' % (portal_owner, default_password) browser.addHeader('Authorization', 'Basic %s' % basic) browser.open('%s/refbrowser_popup?%s' % (page.absolute_url(), urlencode(data))) self.assertTrue(('<a class="browsesite" href="http://nohost/plone/refbrowser_popup?' 'fieldName=relatedItems&fieldRealName=relatedItems' '&at_url=plone/folder1/page1" rel="Home"> ' '<span>Home</span> </a>') in normalize(browser.contents)) # now let's change the navigation root zope.interface.alsoProvides(self.portal.folder1, INavigationRoot) browser.open('%s/refbrowser_popup?%s' % (page.absolute_url(), urlencode(data))) self.assertTrue(('<a class="browsesite" href="http://nohost/plone/folder1/refbrowser_popup?' 'fieldName=relatedItems&fieldRealName=relatedItems' '&at_url=plone/folder1/page1" rel="Home"> ' '<span>Home</span> </a>') in normalize(browser.contents))
def test_bc_navigationroot(self): makeContent(self.portal.folder1, portal_type="Document", id="page1") page = self.portal.folder1.page1 browser = Browser() data = {"fieldName": "relatedItems", "fieldRealName": "relatedItems", "at_url": page.absolute_url(1)} basic = "%s:%s" % (portal_owner, default_password) browser.addHeader("Authorization", "Basic %s" % basic) browser.open("%s/refbrowser_popup?%s" % (page.absolute_url(), urlencode(data))) self.assertTrue( ( '<a class="browsesite" href="http://nohost/plone/refbrowser_popup?' "fieldName=relatedItems&fieldRealName=relatedItems" '&at_url=plone/folder1/page1" rel="Home"> ' "<span>Home</span> </a>" ) in normalize(browser.contents) ) # now let's change the navigation root zope.interface.alsoProvides(self.portal.folder1, INavigationRoot) browser.open("%s/refbrowser_popup?%s" % (page.absolute_url(), urlencode(data))) self.assertTrue( ( '<a class="browsesite" href="http://nohost/plone/folder1/refbrowser_popup?' "fieldName=relatedItems&fieldRealName=relatedItems" '&at_url=plone/folder1/page1" rel="Home"> ' "<span>Home</span> </a>" ) in normalize(browser.contents) )
def test_auth(self): # Based on Testing.ZopeTestCase.testFunctional basic_auth = '%s:%s' % (user_name, user_password) self.folder.addDTMLDocument('secret_html', file='secret') self.folder.secret_html.manage_permission(view, ['Owner']) path = '/' + self.folder.absolute_url(1) + '/secret_html' # Test direct publishing response = self.publish(path + '/secret_html') self.assertEqual(response.getStatus(), 401) response = self.publish(path + '/secret_html', basic_auth) self.assertEqual(response.getStatus(), 200) self.assertEqual(response.getBody(), b'secret') # Test browser url = 'http://localhost' + path browser = Browser() browser.raiseHttpErrors = False browser.open(url) self.assertTrue(browser.headers['status'].startswith('401')) browser.addHeader('Authorization', 'Basic ' + basic_auth) browser.open(url) self.assertTrue(browser.headers['status'].startswith('200')) self.assertEqual(browser.contents, 'secret')
def getBrowser(self, loggedIn=True): """ instantiate and return a testbrowser for convenience """ browser = Browser() if loggedIn: auth = 'Basic %s' % self.getCredentials() browser.addHeader('Authorization', auth) return browser
def getBrowser(self, loggedIn=True): """ instantiate and return a testbrowser for convenience """ browser = Browser() if loggedIn: auth = u'Basic {0}'.format(self.getCredentials()) browser.addHeader('Authorization', auth) return browser
def getBrowser(self, loggedIn=True): """ instantiate and return a testbrowser for convenience """ browser = Browser() if loggedIn: user = ptc.default_user pwd = ptc.default_password browser.addHeader('Authorization', 'Basic %s:%s' % (user, pwd)) return browser
def getBrowser(self, loggedIn=False): """ instantiate and return a testbrowser for convenience """ browser = Browser() if loggedIn: user = PloneTestCase.default_user pwd = PloneTestCase.default_password browser.addHeader('Authorization', 'Basic %s:%s' % (user, pwd)) return browser
def getBrowser(self, loggedIn=True): """ instantiate and return a testbrowser for convenience """ browser = Browser() if loggedIn: user = default_user pwd = default_password browser.addHeader("Authorization", "Basic %s:%s" % (user, pwd)) return browser
def getBrowser(self, logged_in=False): """ instantiate and return a testbrowser for convenience """ browser = Browser() if logged_in: # Add an authorization header using the given or default # credentials """ browser.addHeader('Authorization', 'Basic %s:%s' % ( PloneTestCase.portal_owner, PloneTestCase.default_password)) return browser
def getBrowser(self, logged_in=False): """ instantiate and return a testbrowser for convenience """ browser = Browser() if logged_in: # Add an authorization header using the given or default # credentials """ browser.addHeader( 'Authorization', 'Basic %s:%s' % (PloneTestCase.portal_owner, PloneTestCase.default_password)) return browser
class PythonScriptBrowserTests(FunctionalTestCase): """Browser testing Python Scripts""" def setUp(self): from Products.PythonScripts.PythonScript import manage_addPythonScript super(PythonScriptBrowserTests, self).setUp() Zope2.App.zcml.load_site(force=True) uf = self.app.acl_users uf.userFolderAddUser('manager', 'manager_pass', ['Manager'], []) manage_addPythonScript(self.app, 'py_script') self.browser = Browser() self.browser.addHeader( 'Authorization', 'basic {}'.format(codecs.encode( # NOQA: flake8: P101 b'manager:manager_pass', 'base64').decode())) self.browser.open('http://localhost/py_script/manage_main') def test_ZPythonScriptHTML_upload__no_file(self): """It renders an error message if no file is uploaded.""" self.browser.getControl('Upload File').click() self.assertIn('No file specified', self.browser.contents)
class TestControlPanel(base.FunctionalTestCase): def afterSetUp(self): super(TestControlPanel, self).afterSetUp() self.browser = Browser() def test_extended_form(self): portal_url = self.portal.absolute_url() self.browser.addHeader('Authorization', 'Basic %s:%s' % (portal_owner, default_password)) self.browser.open('%s/@@collectivegeo-controlpanel' % portal_url) widget = None try: widget = self.browser.getControl( name='form.widgets.geo_content_types.to') or False except: self.fail( 'geo_content_types widget not Found in controlpanel form') if widget: geo_content_types = geo_settings(self.portal).geo_content_types self.assertEqual(widget.options, geo_content_types)
class FunctionalTestCase(TestCase, ptc.FunctionalTestCase): def _setup(self): ptc.PloneTestCase._setup(self) # Replace normal mailhost with mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost('MailHost') sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # Make sure our mock mailhost does not give a mailhost_warning # in the overview-controlpanel. self.configure_mail_host(u'mock', '*****@*****.**') def _clear(self, call_close_hook=0): self.portal.MailHost = self.portal._original_MailHost sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(aq_base(self.portal._original_MailHost), provided=IMailHost) ptc.PloneTestCase._clear(self) def get_smtp_host(self): if IMailSchema is None: # Plone 4 return self.portal.MailHost.smtp_host else: # Plone 5.0 and higher registry = getUtility(IRegistry) mail_settings = registry.forInterface(IMailSchema, prefix='plone', check=False) return mail_settings.smtp_host def configure_mail_host(self, smtp_host, address=None): if IMailSchema is None: # Plone 4 self.portal.MailHost.smtp_host = smtp_host if address is not None: self.portal.email_from_address = address else: # Plone 5.0 and higher registry = getUtility(IRegistry) mail_settings = registry.forInterface(IMailSchema, prefix='plone', check=False) if not isinstance(smtp_host, unicode): # must be unicode smtp_host = smtp_host.decode('utf-8') mail_settings.smtp_host = smtp_host if address is not None: if isinstance(address, unicode): # must be ascii address = address.encode('utf-8') mail_settings.email_from_address = address def afterSetUp(self): """Add some extra content and do some setup. """ # We need to do this as Manager: self.setRoles(['Manager']) # Add some news items: sample_text = "<p>Have I got news for <em>you</em>!</p>" self.portal.news.invokeFactory('News Item', 'first', title="First News", text=sample_text) self.portal.news.invokeFactory('News Item', 'second', title="Second News", text=sample_text) # Set fullname and email address of test user: member = self.portal.portal_membership.getAuthenticatedMember() member.setMemberProperties({ 'fullname': 'Test User', 'email': '*****@*****.**' }) # Add extra members: self.addMember('maurits', 'Maurits van Rees', '*****@*****.**') self.addMember('reinout', 'Reinout van Rees', '*****@*****.**') # Setup test browser: try: from Testing.testbrowser import Browser Browser # pyflakes except ImportError: from Products.Five.testbrowser import Browser self.browser = Browser() self.browser.handleErrors = False self.browser.addHeader('Accept-Language', 'en-US') self.portal.error_log._ignored_exceptions = () # No more Manager: self.setRoles([]) def addMember(self, username, fullname, email): self.portal.portal_membership.addMember(username, ptc.default_password, [], []) member = self.portal.portal_membership.getMemberById(username) member.setMemberProperties({'fullname': fullname, 'email': email}) def browser_login(self, user=None): if not user: user = ptc.default_user self.browser.open(self.portal.absolute_url() + '/login_form') self.browser.getLink('Log in').click() self.browser.getControl(name='__ac_name').value = user self.browser.getControl(name='__ac_password').value = \ ptc.default_password self.browser.getControl(name='submit').click()
class FunctionalTestCase(TestCase, ptc.FunctionalTestCase): def _setup(self): ptc.PloneTestCase._setup(self) # Replace normal mailhost with mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost('MailHost') sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # Make sure our mock mailhost does not give a mailhost_warning # in the overview-controlpanel. self.configure_mail_host(u'mock', '*****@*****.**') def _clear(self, call_close_hook=0): self.portal.MailHost = self.portal._original_MailHost sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(aq_base(self.portal._original_MailHost), provided=IMailHost) ptc.PloneTestCase._clear(self) def get_smtp_host(self): if IMailSchema is None: # Plone 4 return self.portal.MailHost.smtp_host else: # Plone 5.0 and higher registry = getUtility(IRegistry) mail_settings = registry.forInterface( IMailSchema, prefix='plone', check=False) return mail_settings.smtp_host def configure_mail_host(self, smtp_host, address=None): if IMailSchema is None: # Plone 4 self.portal.MailHost.smtp_host = smtp_host if address is not None: self.portal.email_from_address = address else: # Plone 5.0 and higher registry = getUtility(IRegistry) mail_settings = registry.forInterface( IMailSchema, prefix='plone', check=False) if not isinstance(smtp_host, unicode): # must be unicode smtp_host = smtp_host.decode('utf-8') mail_settings.smtp_host = smtp_host if address is not None: if isinstance(address, unicode): # must be ascii address = address.encode('utf-8') mail_settings.email_from_address = address def afterSetUp(self): """Add some extra content and do some setup. """ # We need to do this as Manager: self.setRoles(['Manager']) # Add some news items: sample_text = "<p>Have I got news for <em>you</em>!</p>" self.portal.news.invokeFactory( 'News Item', 'first', title="First News", text=sample_text) self.portal.news.invokeFactory( 'News Item', 'second', title="Second News", text=sample_text) # Set fullname and email address of test user: member = self.portal.portal_membership.getAuthenticatedMember() member.setMemberProperties({'fullname': 'Test User', 'email': '*****@*****.**'}) # Add extra members: self.addMember('maurits', 'Maurits van Rees', '*****@*****.**') self.addMember('reinout', 'Reinout van Rees', '*****@*****.**') # Setup test browser: try: from Testing.testbrowser import Browser Browser # pyflakes except ImportError: from Products.Five.testbrowser import Browser self.browser = Browser() self.browser.handleErrors = False self.browser.addHeader('Accept-Language', 'en-US') self.portal.error_log._ignored_exceptions = () # No more Manager: self.setRoles([]) def addMember(self, username, fullname, email): self.portal.portal_membership.addMember( username, ptc.default_password, [], []) member = self.portal.portal_membership.getMemberById(username) member.setMemberProperties({'fullname': fullname, 'email': email}) def browser_login(self, user=None): if not user: user = ptc.default_user self.browser.open(self.portal.absolute_url() + '/login_form') self.browser.getLink('Log in').click() self.browser.getControl(name='__ac_name').value = user self.browser.getControl(name='__ac_password').value = \ ptc.default_password self.browser.getControl(name='submit').click()
class PythonScriptBrowserTests(FunctionalTestCase): """Browser testing Python Scripts""" def setUp(self): from Products.PythonScripts.PythonScript import manage_addPythonScript super(PythonScriptBrowserTests, self).setUp() Zope2.App.zcml.load_site(force=True) uf = self.app.acl_users uf.userFolderAddUser('manager', 'manager_pass', ['Manager'], []) manage_addPythonScript(self.app, 'py_script') self.browser = Browser() self.browser.addHeader( 'Authorization', 'basic {}'.format( codecs.encode( # noqa: P101 b'manager:manager_pass', 'base64').decode())) self.browser.open('http://localhost/py_script/manage_main') def test_ZPythonScriptHTML_upload__no_file(self): """It renders an error message if no file is uploaded.""" self.browser.getControl('Upload File').click() self.assertIn('No file specified', self.browser.contents) def test_ZPythonScriptHTML_upload__with_file(self): file_contents = b'print("hello")' self.browser.getControl('file').add_file(file_contents, 'text/plain', 'script.py') self.browser.getControl('Upload File').click() assert 'Saved changes.' in self.browser.contents def test_PythonScript_proxyroles_manager(self): test_role = 'Test Role' self.app._addRole(test_role) # Test the original state self.assertFalse(self.app.py_script.manage_haveProxy(test_role)) # Go to the "Proxy" ZMI tab, grab the Proxy Roles select box, # select the new role and submit self.browser.open('http://localhost/py_script/manage_proxyForm') roles_selector = self.browser.getControl(name='roles:list') testrole_option = roles_selector.getControl(test_role) self.assertFalse(testrole_option.selected) testrole_option.selected = True self.browser.getControl('Save Changes').click() # The Python Script should now have a proxy role set self.assertTrue(self.app.py_script.manage_haveProxy(test_role)) def test_PythonScript_proxyroles_nonmanager(self): # This test checks an unusual configuration where roles other than # Manager are allowed to change proxy roles. proxy_form_url = 'http://localhost/py_script/manage_proxyForm' test_role = 'Test Role' self.app._addRole(test_role) test_role_2 = 'Unprivileged Role' self.app._addRole(test_role_2) self.app.manage_permission(change_proxy_roles, ['Manager', test_role]) # Add some test users uf = self.app.acl_users uf.userFolderAddUser('privileged', 'priv', [test_role], []) uf.userFolderAddUser('peon', 'unpriv', [test_role_2], []) # Test the original state self.assertFalse(self.app.py_script.manage_haveProxy(test_role)) self.assertFalse(self.app.py_script.manage_haveProxy(test_role_2)) # Attempt as unprivileged user will fail both in the browser and # from trusted code self.browser.login('peon', 'unpriv') with self.assertRaises(HTTPError): self.browser.open(proxy_form_url) newSecurityManager(None, uf.getUser('peon')) with self.assertRaises(zExceptions.Forbidden): self.app.py_script.manage_proxy(roles=(test_role, )) self.assertFalse(self.app.py_script.manage_haveProxy(test_role)) # Now log in as privileged user and try to set a proxy role # the privileged user does not have. This must fail. self.browser.login('privileged', 'priv') self.browser.open(proxy_form_url) roles_selector = self.browser.getControl(name='roles:list') bad_option = roles_selector.getControl(test_role_2) self.assertFalse(bad_option.selected) bad_option.selected = True with self.assertRaises(HTTPError): self.browser.getControl('Save Changes').click() self.assertFalse(self.app.py_script.manage_haveProxy(test_role_2)) newSecurityManager(None, uf.getUser('privileged')) with self.assertRaises(zExceptions.Forbidden): self.app.py_script.manage_proxy(roles=(test_role_2, )) self.assertFalse(self.app.py_script.manage_haveProxy(test_role_2)) # Trying again as privileged user with a proxy role the user has self.browser.open(proxy_form_url) roles_selector = self.browser.getControl(name='roles:list') testrole_option = roles_selector.getControl(test_role) self.assertFalse(testrole_option.selected) testrole_option.selected = True self.browser.getControl('Save Changes').click() # The Python Script should now have a proxy role set self.assertTrue(self.app.py_script.manage_haveProxy(test_role)) # Cleanup noSecurityManager()