Author: russellm
Date: 2010-08-20 22:02:47 -0500 (Fri, 20 Aug 2010)
New Revision: 13621

Modified:
   django/branches/releases/1.2.X/django/test/client.py
   
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/models.py
   
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/urls.py
   
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/views.py
Log:
[1.2.X] Fixed #13140 -- Ensure that request headers are preserved through 
redirect chains in the test client. Thanks to David Novakovic for the report.

Backport of r13620 from trunk.

Modified: django/branches/releases/1.2.X/django/test/client.py
===================================================================
--- django/branches/releases/1.2.X/django/test/client.py        2010-08-21 
03:01:46 UTC (rev 13620)
+++ django/branches/releases/1.2.X/django/test/client.py        2010-08-21 
03:02:47 UTC (rev 13621)
@@ -293,7 +293,7 @@
 
         response = self.request(**r)
         if follow:
-            response = self._handle_redirects(response)
+            response = self._handle_redirects(response, **extra)
         return response
 
     def post(self, path, data={}, content_type=MULTIPART_CONTENT,
@@ -325,7 +325,7 @@
 
         response = self.request(**r)
         if follow:
-            response = self._handle_redirects(response)
+            response = self._handle_redirects(response, **extra)
         return response
 
     def head(self, path, data={}, follow=False, **extra):
@@ -344,7 +344,7 @@
 
         response = self.request(**r)
         if follow:
-            response = self._handle_redirects(response)
+            response = self._handle_redirects(response, **extra)
         return response
 
     def options(self, path, data={}, follow=False, **extra):
@@ -362,7 +362,7 @@
 
         response = self.request(**r)
         if follow:
-            response = self._handle_redirects(response)
+            response = self._handle_redirects(response, **extra)
         return response
 
     def put(self, path, data={}, content_type=MULTIPART_CONTENT,
@@ -394,7 +394,7 @@
 
         response = self.request(**r)
         if follow:
-            response = self._handle_redirects(response)
+            response = self._handle_redirects(response, **extra)
         return response
 
     def delete(self, path, data={}, follow=False, **extra):
@@ -412,7 +412,7 @@
 
         response = self.request(**r)
         if follow:
-            response = self._handle_redirects(response)
+            response = self._handle_redirects(response, **extra)
         return response
 
     def login(self, **credentials):
@@ -467,7 +467,7 @@
             session.delete(session_key=session_cookie.value)
         self.cookies = SimpleCookie()
 
-    def _handle_redirects(self, response):
+    def _handle_redirects(self, response, **extra):
         "Follows any redirects by requesting responses from the server using 
GET."
 
         response.redirect_chain = []
@@ -478,7 +478,6 @@
             redirect_chain = response.redirect_chain
             redirect_chain.append((url, response.status_code))
 
-            extra = {}
             if scheme:
                 extra['wsgi.url_scheme'] = scheme
 

Modified: 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/models.py
===================================================================
--- 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/models.py
  2010-08-21 03:01:46 UTC (rev 13620)
+++ 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/models.py
  2010-08-21 03:02:47 UTC (rev 13621)
@@ -845,3 +845,17 @@
                          encode_file('IGNORE', 'IGNORE', 
DummyFile("file.zip"))[2])
         self.assertEqual('Content-Type: application/octet-stream',
                          encode_file('IGNORE', 'IGNORE', 
DummyFile("file.unknown"))[2])
+
+class RequestHeadersTest(TestCase):
+    def test_client_headers(self):
+        "A test client can receive custom headers"
+        response = self.client.get("/test_client_regress/check_headers/", 
HTTP_X_ARG_CHECK='Testing 123')
+        self.assertEquals(response.content, "HTTP_X_ARG_CHECK: Testing 123")
+        self.assertEquals(response.status_code, 200)
+
+    def test_client_headers_redirect(self):
+        "Test client headers are preserved through redirects"
+        response = 
self.client.get("/test_client_regress/check_headers_redirect/", follow=True, 
HTTP_X_ARG_CHECK='Testing 123')
+        self.assertEquals(response.content, "HTTP_X_ARG_CHECK: Testing 123")
+        self.assertRedirects(response, '/test_client_regress/check_headers/',
+            status_code=301, target_status_code=200)

Modified: 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/urls.py
===================================================================
--- 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/urls.py
    2010-08-21 03:01:46 UTC (rev 13620)
+++ 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/urls.py
    2010-08-21 03:02:47 UTC (rev 13621)
@@ -24,4 +24,6 @@
     (r'^request_methods/$', views.request_methods_view),
     (r'^check_unicode/$', views.return_unicode),
     (r'^parse_unicode_json/$', views.return_json_file),
+    (r'^check_headers/$', views.check_headers),
+    (r'^check_headers_redirect/$', redirect_to, {'url': 
'/test_client_regress/check_headers/'}),
 )

Modified: 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/views.py
===================================================================
--- 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/views.py
   2010-08-21 03:01:46 UTC (rev 13620)
+++ 
django/branches/releases/1.2.X/tests/regressiontests/test_client_regress/views.py
   2010-08-21 03:02:47 UTC (rev 13621)
@@ -86,3 +86,8 @@
                             mimetype='application/json; charset=' + charset)
     response['Content-Disposition'] = 'attachment; filename=testfile.json'
     return response
+
+def check_headers(request):
+    "A view that responds with value of the X-ARG-CHECK header"
+    return HttpResponse('HTTP_X_ARG_CHECK: %s' % 
request.META.get('HTTP_X_ARG_CHECK', 'Undefined'))
+

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to