Example #1
0
    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&amp;fieldRealName=relatedItems'
                         '&amp;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&amp;fieldRealName=relatedItems'
                         '&amp;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&amp;fieldRealName=relatedItems"
                '&amp;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&amp;fieldRealName=relatedItems"
                '&amp;at_url=plone/folder1/page1" rel="Home"> '
                "<span>Home</span> </a>"
            )
            in normalize(browser.contents)
        )
Example #3
0
    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')
Example #4
0
 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
Example #5
0
    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')
Example #6
0
 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
Example #7
0
 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
Example #8
0
 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
Example #10
0
 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
Example #11
0
 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()
Example #15
0
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()
Example #16
0
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()