From dc47827a03cc6652c683f96ec5d3a68b8ff87c20 Mon Sep 17 00:00:00 2001 From: Jens Vagelpohl Date: Wed, 21 Nov 2018 21:12:12 -0600 Subject: [PATCH] - Add TestBrowser ``login`` method to set basic auth header (fixes #341) --- CHANGES.rst | 3 +++ src/App/tests/test_ApplicationManager.py | 6 +----- src/OFS/tests/testFileAndImage.py | 6 +----- src/OFS/tests/testSorting.py | 6 +----- src/OFS/tests/test_DTMLMethod.py | 6 +----- src/Testing/testbrowser.py | 10 ++++++++++ src/Testing/tests/test_testbrowser.py | 2 +- src/ZPublisher/tests/test_WSGIPublisher.py | 6 +----- 8 files changed, 19 insertions(+), 26 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index fc6ac76f2e..9c0fd94d43 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -20,6 +20,9 @@ New features - Add support for IPv6 hosts in VirtualHostMonster. (`#314 `_) +- Add TestBrowser ``login`` method to set basic auth header + (`#341 _`) + Other changes +++++++++++++ diff --git a/src/App/tests/test_ApplicationManager.py b/src/App/tests/test_ApplicationManager.py index e061705445..dea1e82747 100644 --- a/src/App/tests/test_ApplicationManager.py +++ b/src/App/tests/test_ApplicationManager.py @@ -1,5 +1,4 @@ import Testing.ZopeTestCase -import codecs import os import shutil import sys @@ -295,10 +294,7 @@ def setUp(self): uf = self.app.acl_users uf.userFolderAddUser('manager', 'manager_pass', ['Manager'], []) self.browser = Testing.testbrowser.Browser() - self.browser.addHeader( - 'Authorization', - 'basic {}'.format(codecs.encode( - b'manager:manager_pass', 'base64').decode())) + self.browser.login('manager', 'manager_pass') def test_menu_dtml__1(self): """It contains the databases in navigation.""" diff --git a/src/OFS/tests/testFileAndImage.py b/src/OFS/tests/testFileAndImage.py index 598fff42ee..5fd05a57d5 100644 --- a/src/OFS/tests/testFileAndImage.py +++ b/src/OFS/tests/testFileAndImage.py @@ -15,7 +15,6 @@ from ZPublisher.HTTPRequest import HTTPRequest from ZPublisher.HTTPResponse import HTTPResponse -import codecs import OFS.Image import os import six @@ -347,10 +346,7 @@ def setUp(self): transaction.commit() self.browser = Testing.testbrowser.Browser() - self.browser.addHeader( - 'Authorization', - 'basic {}'.format(codecs.encode( - b'manager:manager_pass', 'base64').decode())) + self.browser.login('manager', 'manager_pass') def test_Image__manage_main__1(self): """It shows the content of text files as text.""" diff --git a/src/OFS/tests/testSorting.py b/src/OFS/tests/testSorting.py index 0187d15343..bc4a9a181d 100644 --- a/src/OFS/tests/testSorting.py +++ b/src/OFS/tests/testSorting.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -import codecs import Testing.testbrowser import Testing.ZopeTestCase import Zope2.App @@ -24,10 +23,7 @@ def setUp(self): folder.File1.update_data(u'hällo'.encode('utf-8')) self.browser = Testing.testbrowser.Browser() - self.browser.addHeader( - 'Authorization', - 'basic {}'.format(codecs.encode( - b'manager:manager_pass', 'base64').decode())) + self.browser.login('manager', 'manager_pass') def check_order(self, expect_1_before_2): found_1_before_2 = ( diff --git a/src/OFS/tests/test_DTMLMethod.py b/src/OFS/tests/test_DTMLMethod.py index 58176f5067..f8dd977b14 100644 --- a/src/OFS/tests/test_DTMLMethod.py +++ b/src/OFS/tests/test_DTMLMethod.py @@ -2,7 +2,6 @@ import Testing.ZopeTestCase import Testing.testbrowser import Zope2.App.zcml -import codecs import io import unittest import zExceptions @@ -111,10 +110,7 @@ def setUp(self): addDTMLMethod(self.app, 'dtml_meth') self.browser = Testing.testbrowser.Browser() - self.browser.addHeader( - 'Authorization', - 'basic {}'.format(codecs.encode( - b'manager:manager_pass', 'base64').decode())) + self.browser.login('manager', 'manager_pass') self.browser.open('http://localhost/dtml_meth/manage_main') def test_manage_upload__Locked__REQUEST(self): diff --git a/src/Testing/testbrowser.py b/src/Testing/testbrowser.py index 65bcc9e2b7..470b2b51a1 100644 --- a/src/Testing/testbrowser.py +++ b/src/Testing/testbrowser.py @@ -14,6 +14,7 @@ """Support for using zope.testbrowser from Zope2. """ +import codecs import transaction from zope.testbrowser import browser @@ -63,3 +64,12 @@ def __init__(self, url=None, wsgi_app=None): if wsgi_app is None: wsgi_app = WSGITestApp(self) super(Browser, self).__init__(url=url, wsgi_app=wsgi_app) + + def login(self, username, password): + """Set up a correct HTTP Basic Auth Authorization header""" + if not isinstance(username, bytes): + username = username.encode('UTF-8') + if not isinstance(password, bytes): + password = password.encode('UTF-8') + hdr = codecs.encode(b'%s:%s' % (username, password), 'base64') + self.addHeader('Authorization', 'basic {}'.format(hdr.decode('UTF-8'))) diff --git a/src/Testing/tests/test_testbrowser.py b/src/Testing/tests/test_testbrowser.py index 3f79cc273a..b0d75aa209 100644 --- a/src/Testing/tests/test_testbrowser.py +++ b/src/Testing/tests/test_testbrowser.py @@ -76,7 +76,7 @@ def test_auth(self): browser.open(url) self.assertTrue(browser.headers['status'].startswith('401')) - browser.addHeader('Authorization', 'Basic ' + basic_auth) + browser.login(user_name, user_password) browser.open(url) self.assertTrue(browser.headers['status'].startswith('200')) self.assertEqual(browser.contents, 'secret') diff --git a/src/ZPublisher/tests/test_WSGIPublisher.py b/src/ZPublisher/tests/test_WSGIPublisher.py index c1c5eeee32..a38ec7b7be 100644 --- a/src/ZPublisher/tests/test_WSGIPublisher.py +++ b/src/ZPublisher/tests/test_WSGIPublisher.py @@ -11,7 +11,6 @@ # FOR A PARTICULAR PURPOSE # ############################################################################## -import codecs import io import unittest @@ -555,10 +554,7 @@ def test_can_handle_non_ascii_URLs(self): manage_addFile(self.app, 'täst', u'çöńtêñt'.encode('utf-8')) browser = Testing.testbrowser.Browser() - browser.addHeader( - 'Authorization', - 'basic {}'.format(codecs.encode( - b'manager:manager_pass', 'base64').decode())) + browser.login('manager', 'manager_pass') browser.open('http://localhost/{}'.format(quote('täst'))) self.assertEqual(browser.contents.decode('utf-8'), u'çöńtêñt')