Hello community,

here is the log from the commit of package python-zope.testbrowser for 
openSUSE:Factory checked in at 2020-01-21 21:02:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-zope.testbrowser (Old)
 and      /work/SRC/openSUSE:Factory/.python-zope.testbrowser.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-zope.testbrowser"

Tue Jan 21 21:02:37 2020 rev:12 rq:766054 version:5.5.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-zope.testbrowser/python-zope.testbrowser.changes
  2019-11-07 23:17:17.880585478 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-zope.testbrowser.new.26092/python-zope.testbrowser.changes
       2020-01-21 21:03:26.724935098 +0100
@@ -1,0 +2,14 @@
+Tue Jan 21 10:36:36 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- update to 5.5.1
+  * Stop sending a Referer header when browser.open or browser.post is called 
directly.
+  * Add error checking to the setters for ListControl.displayValue and 
CheckboxListControl.displayValue: 
+    in line with the old mechanize-based implementation, these will now raise 
ItemNotFoundError 
+    if any of the given values are not found, or ItemCountError on trying to 
set more than one value 
+    on a single-valued control.
+  * Fix AttributeError in add_file when trying to add to a control which is 
not a file upload.
+  * Fix a bug where browser.goBack() did not invalidate caches, so subsequent 
queries could use data 
+    from the wrong response.
+  * Support telling the browser not to follow redirects by setting 
Browser.follow_redirects to False.
+
+-------------------------------------------------------------------

Old:
----
  zope.testbrowser-5.4.0.tar.gz

New:
----
  zope.testbrowser-5.5.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-zope.testbrowser.spec ++++++
--- /var/tmp/diff_new_pack.dKyXZH/_old  2020-01-21 21:03:28.356935859 +0100
+++ /var/tmp/diff_new_pack.dKyXZH/_new  2020-01-21 21:03:28.360935861 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-zope.testbrowser
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-zope.testbrowser
-Version:        5.4.0
+Version:        5.5.1
 Release:        0
 Summary:        Programmable browser for functional black-box tests
 License:        ZPL-2.1

++++++ zope.testbrowser-5.4.0.tar.gz -> zope.testbrowser-5.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.testbrowser-5.4.0/CHANGES.rst 
new/zope.testbrowser-5.5.1/CHANGES.rst
--- old/zope.testbrowser-5.4.0/CHANGES.rst      2019-11-01 10:44:52.000000000 
+0100
+++ new/zope.testbrowser-5.5.1/CHANGES.rst      2019-11-12 10:52:53.000000000 
+0100
@@ -2,15 +2,45 @@
 CHANGES
 =======
 
+5.5.1 (2019-11-12)
+------------------
+
+- Stop sending a ``Referer`` header when ``browser.open`` or
+  ``browser.post`` is called directly.  See `issue 87
+  <https://github.com/zopefoundation/zope.testbrowser/issues/87>`_.
+
+- Add error checking to the setters for ``ListControl.displayValue`` and
+  ``CheckboxListControl.displayValue``: in line with the old
+  ``mechanize``-based implementation, these will now raise
+  ``ItemNotFoundError`` if any of the given values are not found, or
+  ``ItemCountError`` on trying to set more than one value on a single-valued
+  control.  See `issue 44
+  <https://github.com/zopefoundation/zope.testbrowser/issues/44>`_.
+
+- Fix AttributeError in `add_file` when trying to add to a control which is
+  not a file upload.
+
+5.5.0 (2019-11-11)
+------------------
+
+- Fix a bug where ``browser.goBack()`` did not invalidate caches, so
+  subsequent queries could use data from the wrong response.  See `issue 83
+  <https://github.com/zopefoundation/zope.testbrowser/issues/83>`_.
+
+- Support telling the browser not to follow redirects by setting
+  ``Browser.follow_redirects`` to False.  See `issue 79
+  <https://github.com/zopefoundation/zope.testbrowser/issues/79>`_.
+
+
 5.4.0 (2019-11-01)
 ------------------
 
 - Fix a bug where browser.reload() would not follow redirects or raise
   exceptions for bad HTTP statuses.  See `issue 75
-  <https://zopefoundation/zope.testbrowser/issue/75>`_.
+  <https://github.com/zopefoundation/zope.testbrowser/issues/75>`_.
 
 - Add Python 3.8 support.  See `issue 80
-  <https://github.com/zopefoundation/zope.testbrowser/issue/80>`_.
+  <https://github.com/zopefoundation/zope.testbrowser/issues/80>`_.
 
 
 5.3.3 (2019-07-02)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.testbrowser-5.4.0/PKG-INFO 
new/zope.testbrowser-5.5.1/PKG-INFO
--- old/zope.testbrowser-5.4.0/PKG-INFO 2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/PKG-INFO 2019-11-12 10:52:54.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: zope.testbrowser
-Version: 5.4.0
+Version: 5.5.1
 Summary: Programmable browser for functional black-box tests
 Home-page: https://github.com/zopefoundation/zope.testbrowser
 Author: Zope Corporation and Contributors
@@ -33,15 +33,45 @@
         CHANGES
         =======
         
+        5.5.1 (2019-11-12)
+        ------------------
+        
+        - Stop sending a ``Referer`` header when ``browser.open`` or
+          ``browser.post`` is called directly.  See `issue 87
+          <https://github.com/zopefoundation/zope.testbrowser/issues/87>`_.
+        
+        - Add error checking to the setters for ``ListControl.displayValue`` 
and
+          ``CheckboxListControl.displayValue``: in line with the old
+          ``mechanize``-based implementation, these will now raise
+          ``ItemNotFoundError`` if any of the given values are not found, or
+          ``ItemCountError`` on trying to set more than one value on a 
single-valued
+          control.  See `issue 44
+          <https://github.com/zopefoundation/zope.testbrowser/issues/44>`_.
+        
+        - Fix AttributeError in `add_file` when trying to add to a control 
which is
+          not a file upload.
+        
+        5.5.0 (2019-11-11)
+        ------------------
+        
+        - Fix a bug where ``browser.goBack()`` did not invalidate caches, so
+          subsequent queries could use data from the wrong response.  See 
`issue 83
+          <https://github.com/zopefoundation/zope.testbrowser/issues/83>`_.
+        
+        - Support telling the browser not to follow redirects by setting
+          ``Browser.follow_redirects`` to False.  See `issue 79
+          <https://github.com/zopefoundation/zope.testbrowser/issues/79>`_.
+        
+        
         5.4.0 (2019-11-01)
         ------------------
         
         - Fix a bug where browser.reload() would not follow redirects or raise
           exceptions for bad HTTP statuses.  See `issue 75
-          <https://zopefoundation/zope.testbrowser/issue/75>`_.
+          <https://github.com/zopefoundation/zope.testbrowser/issues/75>`_.
         
         - Add Python 3.8 support.  See `issue 80
-          <https://github.com/zopefoundation/zope.testbrowser/issue/80>`_.
+          <https://github.com/zopefoundation/zope.testbrowser/issues/80>`_.
         
         
         5.3.3 (2019-07-02)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.testbrowser-5.4.0/docs/narrative.rst 
new/zope.testbrowser-5.5.1/docs/narrative.rst
--- old/zope.testbrowser-5.4.0/docs/narrative.rst       2019-11-01 
10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/docs/narrative.rst       2019-11-12 
10:52:53.000000000 +0100
@@ -844,6 +844,10 @@
     ['Un', 'Deux']
     >>> ctrl.value
     ['1', '2']
+    >>> ctrl.displayValue = ['Quatre']
+    Traceback (most recent call last):
+    ...
+    ItemNotFoundError: Quatre
 
 - 'controls' gives you a list of the subcontrol objects in the control
   (subcontrols are discussed below).
@@ -1074,6 +1078,14 @@
     ['Third']
     >>> ctrl.value
     ['3']
+    >>> ctrl.displayValue = ['Quatre']
+    Traceback (most recent call last):
+    ...
+    ItemNotFoundError: Quatre
+    >>> ctrl.displayValue = ['Uno', 'Dos']
+    Traceback (most recent call last):
+    ...
+    ItemCountError: single selection list, must set sequence of length 0 or 1
 
 Selection Control (Multi-Valued)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1124,6 +1136,10 @@
     >>> browser.getControl(
     ...     name='single-disabled-unvalued-checkbox-value').disabled
     True
+    >>> ctrl.displayValue = ['Nonsense']
+    Traceback (most recent call last):
+    ...
+    ItemNotFoundError: Nonsense
 
 Checkbox Control (Single-Valued, Valued)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1166,6 +1182,10 @@
     False
     >>> ctrl.displayValue
     []
+    >>> ctrl.displayValue = ['Nonsense']
+    Traceback (most recent call last):
+    ...
+    ItemNotFoundError: Nonsense
 
   - Checkbox Control (Multi-Valued)
 
@@ -1209,6 +1229,10 @@
     >>> browser.getControl('Three').selected = False
     >>> ctrl.value
     []
+    >>> ctrl.displayValue = ['Four']
+    Traceback (most recent call last):
+    ...
+    ItemNotFoundError: Four
 
 Radio Control
 ~~~~~~~~~~~~~
@@ -1271,6 +1295,14 @@
     ['1']
     >>> ctrl.displayValue
     ['Ein']
+    >>> ctrl.displayValue = ['Vier']
+    Traceback (most recent call last):
+    ...
+    ItemNotFoundError: Vier
+    >>> ctrl.displayValue = ['Ein', 'Zwei']
+    Traceback (most recent call last):
+    ...
+    ItemCountError: single selection list, must set sequence of length 0 or 1
 
 The radio control subcontrols were illustrated above.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.testbrowser-5.4.0/setup.py 
new/zope.testbrowser-5.5.1/setup.py
--- old/zope.testbrowser-5.4.0/setup.py 2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/setup.py 2019-11-12 10:52:53.000000000 +0100
@@ -27,7 +27,7 @@
 
 setup(
     name='zope.testbrowser',
-    version='5.4.0',
+    version='5.5.1',
     url='https://github.com/zopefoundation/zope.testbrowser',
     license='ZPL 2.1',
     project_urls={
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/zope.testbrowser-5.4.0/src/zope/testbrowser/browser.py 
new/zope.testbrowser-5.5.1/src/zope/testbrowser/browser.py
--- old/zope.testbrowser-5.4.0/src/zope/testbrowser/browser.py  2019-11-01 
10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope/testbrowser/browser.py  2019-11-12 
10:52:53.000000000 +0100
@@ -136,6 +136,7 @@
     _response = None
     _req_headers = None
     _req_content_type = None
+    _req_referrer = None
     _history = None
     __html = None
 
@@ -143,6 +144,7 @@
         self.timer = Timer()
         self.raiseHttpErrors = True
         self.handleErrors = True
+        self.followRedirects = True
 
         if wsgi_app is None:
             self.testapp = TestbrowserApp(TransparentProxy())
@@ -194,6 +196,8 @@
         def make_request(args):
             return self.testapp.request(self._response.request)
 
+        # _req_referrer is left intact, so will be the referrer (if any) of
+        # the request being reloaded.
         self._processRequest(self.url, make_request)
 
     def goBack(self, count=1):
@@ -238,7 +242,7 @@
             raise ValueError('cookies are already set in `cookies` attribute')
         self._req_headers[key] = value
 
-    def open(self, url, data=None):
+    def open(self, url, data=None, referrer=None):
         """See zope.testbrowser.interfaces.IBrowser"""
         url = self._absoluteUrl(url)
         if data is not None:
@@ -248,11 +252,13 @@
             def make_request(args):
                 return self.testapp.get(url, **args)
 
+        self._req_referrer = referrer
         self._processRequest(url, make_request)
 
-    def post(self, url, data, content_type=None):
+    def post(self, url, data, content_type=None, referrer=None):
         if content_type is not None:
             self._req_content_type = content_type
+        self._req_referrer = referrer
         return self.open(url, data)
 
     def _clickSubmit(self, form, control=None, coord=None):
@@ -267,19 +273,23 @@
             def make_request(args):
                 return self._submit(form, coord=coord, **args)
 
+        self._req_referrer = self.url
         self._processRequest(url, make_request)
 
     def _processRequest(self, url, make_request):
         with self._preparedRequest(url) as reqargs:
             self._history.add(self._response)
             resp = make_request(reqargs)
-            remaining_redirects = 100  # infinite loops protection
-            while resp.status_int in REDIRECTS and remaining_redirects:
-                remaining_redirects -= 1
-                url = urlparse.urljoin(url, resp.headers['location'])
-                with self._preparedRequest(url) as reqargs:
-                    resp = self.testapp.get(url, **reqargs)
-            assert remaining_redirects > 0, "redirects chain looks infinite"
+            if self.followRedirects:
+                remaining_redirects = 100  # infinite loops protection
+                while resp.status_int in REDIRECTS and remaining_redirects:
+                    remaining_redirects -= 1
+                    self._req_referrer = url
+                    url = urlparse.urljoin(url, resp.headers['location'])
+                    with self._preparedRequest(url) as reqargs:
+                        resp = self.testapp.get(url, **reqargs)
+                assert remaining_redirects > 0, (
+                    "redirects chain looks infinite")
             self._setResponse(resp)
             self._checkStatus()
 
@@ -310,6 +320,7 @@
 
     def _setResponse(self, response):
         self._response = response
+        self._changed()
 
     def getLink(self, text=None, url=None, id=None, index=0):
         """See zope.testbrowser.interfaces.IBrowser"""
@@ -475,15 +486,14 @@
         self._contents = None
         self._controls = {}
         self.__html = None
-        self._req_content_type = None
 
     @contextmanager
     def _preparedRequest(self, url):
         self.timer.start()
 
         headers = {}
-        if self.url:
-            headers['Referer'] = self.url
+        if self._req_referrer is not None:
+            headers['Referer'] = self._req_referrer
 
         if self._req_content_type:
             headers['Content-Type'] = self._req_content_type
@@ -510,7 +520,7 @@
 
         yield kwargs
 
-        self._changed()
+        self._req_content_type = None
         self.timer.stop()
 
     def _absoluteUrl(self, url):
@@ -603,7 +613,7 @@
     def click(self):
         if self._browser_counter != self.browser._counter:
             raise interfaces.ExpiredError
-        self.browser.open(self.url)
+        self.browser.open(self.url, referrer=self.browser.url)
 
     @property
     def url(self):
@@ -711,7 +721,7 @@
     def add_file(self, file, content_type, filename):
         if self.type != 'file':
             raise TypeError("Can't call add_file on %s controls"
-                            % self.mech_control.type)
+                            % self.type)
 
         if hasattr(file, 'read'):
             contents = file.read()
@@ -867,12 +877,19 @@
 
         if isinstance(value, string_types):
             value = [value]
+        if not self.multiple and len(value) > 1:
+            raise ItemCountError(
+                "single selection list, must set sequence of length 0 or 1")
         values = []
+        found = set()
         for key, titles in self._getOptions():
-            if any(v in t
-                   for t in titles
-                   for v in value):
+            matches = set(v for t in titles for v in value if v in t)
+            if matches:
                 values.append(key)
+                found.update(matches)
+        for v in value:
+            if v not in found:
+                raise ItemNotFoundError(v)
         self.value = values
 
     @property
@@ -989,8 +1006,14 @@
 
     @displayValue.setter
     def displayValue(self, value):
+        found = set()
         for c in self.controls:
-            c.selected = any(v in c.labels for v in value)
+            matches = set(v for v in value if v in c.labels)
+            c.selected = bool(matches)
+            found.update(matches)
+        for v in value:
+            if v not in found:
+                raise ItemNotFoundError(v)
 
     @property
     def multiple(self):
@@ -1479,3 +1502,11 @@
 
 class LinkNotFoundError(IndexError):
     pass
+
+
+class ItemCountError(ValueError):
+    pass
+
+
+class ItemNotFoundError(ValueError):
+    pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/zope.testbrowser-5.4.0/src/zope/testbrowser/interfaces.py 
new/zope.testbrowser-5.5.1/src/zope/testbrowser/interfaces.py
--- old/zope.testbrowser-5.4.0/src/zope/testbrowser/interfaces.py       
2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope/testbrowser/interfaces.py       
2019-11-12 10:52:53.000000000 +0100
@@ -150,6 +150,16 @@
         default=True,
         required=True)
 
+    followRedirects = zope.schema.Bool(
+        title=u"Follow Redirects",
+        description=(u"Describes whether the browser follows redirects. If "
+                     u"set to ``True``, it will automatically issue ``GET`` "
+                     u"requests for redirect responses; if set to ``False``, "
+                     u"it will return redirect responses directly, allowing "
+                     u"the caller to make assertions about them."),
+        default=True,
+        required=True)
+
     def addHeader(key, value):
         """Adds a header to each HTTP request.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/zope.testbrowser-5.4.0/src/zope/testbrowser/tests/test_browser.py 
new/zope.testbrowser-5.5.1/src/zope/testbrowser/tests/test_browser.py
--- old/zope.testbrowser-5.4.0/src/zope/testbrowser/tests/test_browser.py       
2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope/testbrowser/tests/test_browser.py       
2019-11-12 10:52:53.000000000 +0100
@@ -20,7 +20,11 @@
 import doctest
 import unittest
 
-from zope.testbrowser.browser import Browser
+from zope.testbrowser.browser import (
+    Browser,
+    ItemCountError,
+    ItemNotFoundError,
+)
 import zope.testbrowser.tests.helper
 
 
@@ -131,6 +135,18 @@
         self.control.displayValue = []
         self.assertEqual(self.control.displayValue, [])
 
+    def test_displayValue_set_missing_value(self):
+        self.assertEqual(self.control.displayValue, ['Turn'])
+        self.assertRaises(
+            ItemNotFoundError, setattr, self.control, 'displayValue',
+            ['Missing'])
+
+    def test_displayValue_set_too_many_values(self):
+        self.assertEqual(self.control.displayValue, ['Turn'])
+        self.assertRaises(
+            ItemCountError, setattr, self.control, 'displayValue',
+            ['Turn', 'Alternative'])
+
 
 class TestMechRepr(unittest.TestCase):
     """Testing ..browser.*.mechRepr()."""
@@ -189,6 +205,27 @@
         self.assertEqual(mech_repr, '<SubmitControl(sub1=Yës)>')
 
 
+def test_open_no_referrer(self):
+    """
+    Successive calls to open() do not send a referrer.
+
+    >>> app = YetAnotherTestApp()
+    >>> browser = Browser(wsgi_app=app)
+    >>> app.add_response(b'foo')
+    >>> app.add_response(b'bar')
+    >>> browser.open('http://localhost/')
+    >>> browser.contents
+    'foo'
+    >>> 'HTTP_REFERER' in app.last_environ
+    False
+    >>> browser.open('http://localhost/')
+    >>> browser.contents
+    'bar'
+    >>> 'HTTP_REFERER' in app.last_environ
+    False
+    """
+
+
 def test_relative_redirect(self):
     """
     >>> app = YetAnotherTestApp()
@@ -205,6 +242,29 @@
     'found_it'
     >>> browser.url
     'https://localhost/foo/foundit'
+    >>> app.last_environ['HTTP_REFERER']
+    'https://localhost/foo/bar'
+    """
+
+
+def test_disable_following_redirects(self):
+    """
+    If followRedirects is False, the browser does not follow redirects.
+
+    >>> app = YetAnotherTestApp()
+    >>> browser = Browser(wsgi_app=app)
+    >>> redirect = ('Location', 'http://localhost/the_thing')
+    >>> app.add_response(b"Moved", headers=[redirect],
+    ...                  status=302, reason='Found')
+
+    >>> browser.followRedirects = False
+    >>> browser.open('http://localhost/')
+    >>> browser.headers['Status']
+    '302 Found'
+    >>> browser.headers['Location']
+    'http://localhost/the_thing'
+    >>> 'HTTP_REFERER' in app.last_environ
+    False
     """
 
 
@@ -270,6 +330,8 @@
     'http://localhost/the_thing'
     >>> browser.contents
     'The Thing'
+    >>> app.last_environ['HTTP_REFERER']
+    'http://localhost/'
 
     """
 
@@ -355,6 +417,8 @@
     'Processed'
     >>> app.last_environ['REQUEST_METHOD']
     'GET'
+    >>> app.last_environ['HTTP_REFERER']
+    'http://localhost/submit'
     >>> print(app.last_input)
     <BLANKLINE>
 
@@ -366,6 +430,8 @@
     'Reloaded'
     >>> app.last_environ['REQUEST_METHOD']
     'GET'
+    >>> app.last_environ['HTTP_REFERER']
+    'http://localhost/submit'
     >>> print(app.last_input)
     <BLANKLINE>
     """
@@ -425,6 +491,52 @@
     """
 
 
+def test_goBack_changes_cached_html(self):
+    """
+    goBack() causes the browser to clear its cached parsed HTML, so queries
+    that rely on that use the correct response.
+
+    >>> app = TestApp()
+    >>> browser = Browser(wsgi_app=app)
+    >>> app.set_next_response(b'''\
+    ... <html>
+    ...   <head><title>First page</title></head>
+    ...   <body><a href="foo">link</a></body>
+    ... </html>
+    ... ''')
+    >>> browser.open('http://localhost/')
+    GET / HTTP/1.1
+    ...
+    >>> browser.title
+    'First page'
+    >>> browser.getLink('link').url
+    'http://localhost/foo'
+
+    >>> app.set_next_response(b'''\
+    ... <html>
+    ...   <head><title>Second page</title></head>
+    ...   <body><a href="bar">link</a></body>
+    ... </html>
+    ... ''')
+    >>> browser.open('http://localhost/')
+    GET / HTTP/1.1
+    ...
+    >>> browser.title
+    'Second page'
+    >>> browser.getLink('link').url
+    'http://localhost/bar'
+
+    After going back, queries once again return answers based on the first
+    response.
+
+    >>> browser.goBack()
+    >>> browser.title
+    'First page'
+    >>> browser.getLink('link').url
+    'http://localhost/foo'
+    """
+
+
 def test_button_without_name(self):
     """
     This once blew up.
@@ -1234,6 +1346,31 @@
     """
 
 
+def test_link_click_sends_referrer(self):
+    """
+    Clicking on a link sends the previous URL as the referrer.
+
+    >>> app = YetAnotherTestApp()
+    >>> browser = Browser(wsgi_app=app)
+    >>> app.add_response(b'''\
+    ... <html><body>
+    ...   <a href="/foo">Foo</a>
+    ... </body</html>
+    ... ''')
+    >>> app.add_response(b'foo')
+    >>> browser.open('http://localhost/')
+    >>> 'HTTP_REFERER' in app.last_environ
+    False
+    >>> browser.getLink(url='/foo').click()
+    >>> browser.contents
+    'foo'
+    >>> browser.url
+    'http://localhost/foo'
+    >>> app.last_environ['HTTP_REFERER']
+    'http://localhost/'
+    """
+
+
 def test_controls_without_value(self):
     """
     >>> app = TestApp()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/zope.testbrowser-5.4.0/src/zope.testbrowser.egg-info/PKG-INFO 
new/zope.testbrowser-5.5.1/src/zope.testbrowser.egg-info/PKG-INFO
--- old/zope.testbrowser-5.4.0/src/zope.testbrowser.egg-info/PKG-INFO   
2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope.testbrowser.egg-info/PKG-INFO   
2019-11-12 10:52:53.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: zope.testbrowser
-Version: 5.4.0
+Version: 5.5.1
 Summary: Programmable browser for functional black-box tests
 Home-page: https://github.com/zopefoundation/zope.testbrowser
 Author: Zope Corporation and Contributors
@@ -33,15 +33,45 @@
         CHANGES
         =======
         
+        5.5.1 (2019-11-12)
+        ------------------
+        
+        - Stop sending a ``Referer`` header when ``browser.open`` or
+          ``browser.post`` is called directly.  See `issue 87
+          <https://github.com/zopefoundation/zope.testbrowser/issues/87>`_.
+        
+        - Add error checking to the setters for ``ListControl.displayValue`` 
and
+          ``CheckboxListControl.displayValue``: in line with the old
+          ``mechanize``-based implementation, these will now raise
+          ``ItemNotFoundError`` if any of the given values are not found, or
+          ``ItemCountError`` on trying to set more than one value on a 
single-valued
+          control.  See `issue 44
+          <https://github.com/zopefoundation/zope.testbrowser/issues/44>`_.
+        
+        - Fix AttributeError in `add_file` when trying to add to a control 
which is
+          not a file upload.
+        
+        5.5.0 (2019-11-11)
+        ------------------
+        
+        - Fix a bug where ``browser.goBack()`` did not invalidate caches, so
+          subsequent queries could use data from the wrong response.  See 
`issue 83
+          <https://github.com/zopefoundation/zope.testbrowser/issues/83>`_.
+        
+        - Support telling the browser not to follow redirects by setting
+          ``Browser.follow_redirects`` to False.  See `issue 79
+          <https://github.com/zopefoundation/zope.testbrowser/issues/79>`_.
+        
+        
         5.4.0 (2019-11-01)
         ------------------
         
         - Fix a bug where browser.reload() would not follow redirects or raise
           exceptions for bad HTTP statuses.  See `issue 75
-          <https://zopefoundation/zope.testbrowser/issue/75>`_.
+          <https://github.com/zopefoundation/zope.testbrowser/issues/75>`_.
         
         - Add Python 3.8 support.  See `issue 80
-          <https://github.com/zopefoundation/zope.testbrowser/issue/80>`_.
+          <https://github.com/zopefoundation/zope.testbrowser/issues/80>`_.
         
         
         5.3.3 (2019-07-02)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/zope.testbrowser-5.4.0/src/zope.testbrowser.egg-info/requires.txt 
new/zope.testbrowser-5.5.1/src/zope.testbrowser.egg-info/requires.txt
--- old/zope.testbrowser-5.4.0/src/zope.testbrowser.egg-info/requires.txt       
2019-11-01 10:44:52.000000000 +0100
+++ new/zope.testbrowser-5.5.1/src/zope.testbrowser.egg-info/requires.txt       
2019-11-12 10:52:53.000000000 +0100
@@ -1,17 +1,17 @@
+setuptools
+zope.interface
+zope.schema
+zope.cachedescriptors
+pytz>dev
+WebTest>=2.0.30
 BeautifulSoup4
 SoupSieve>=1.9.0
 WSGIProxy2
-WebTest>=2.0.30
-pytz>dev
-setuptools
 six
-zope.cachedescriptors
-zope.interface
-zope.schema
 
 [test]
-mock
 zope.testing
+mock
 
 [test_bbb]
 zope.testbrowser[test]


Reply via email to