Commit bf11ab2b authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.1.X] Fixed #12011 -- Modified the test client to preserve the request...

[1.1.X] Fixed #12011 -- Modified the test client to preserve the request scheme on a redirect. Thanks to tgardner for the report and patch.

Backport of r12419 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12421 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 0e9f1553
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -465,11 +465,15 @@ class Client(object):
            redirect_chain = response.redirect_chain
            redirect_chain.append((url, response.status_code))

            extra = {}
            if scheme:
                extra['wsgi.url_scheme'] = scheme

            # The test client doesn't handle external links,
            # but since the situation is simulated in test_client,
            # we fake things here by ignoring the netloc portion of the
            # redirected URL.
            response = self.get(path, QueryDict(query), follow=False)
            response = self.get(path, QueryDict(query), follow=False, **extra)
            response.redirect_chain = redirect_chain

            # Prevent loops
+10 −0
Original line number Diff line number Diff line
@@ -138,6 +138,16 @@ class ClientTest(TestCase):
        self.assertRedirects(response, 'http://testserver/test_client/get_view/', status_code=302, target_status_code=200)
        self.assertEquals(len(response.redirect_chain), 2)

    def test_redirect_http(self):
        "GET a URL that redirects to an http URI"
        response = self.client.get('/test_client/http_redirect_view/',follow=True)
        self.assertFalse(response.test_was_secure_request)

    def test_redirect_https(self):
        "GET a URL that redirects to an https URI"
        response = self.client.get('/test_client/https_redirect_view/',follow=True)
        self.assertTrue(response.test_was_secure_request)

    def test_notfound_response(self):
        "GET a URL that responds as '404:Not Found'"
        response = self.client.get('/test_client/bad_view/')
+3 −0
Original line number Diff line number Diff line
@@ -8,8 +8,11 @@ urlpatterns = patterns('',
    (r'^header_view/$', views.view_with_header),
    (r'^raw_post_view/$', views.raw_post_view),
    (r'^redirect_view/$', views.redirect_view),
    (r'^secure_view/$', views.view_with_secure),
    (r'^permanent_redirect_view/$', redirect_to, {'url': '/test_client/get_view/'}),
    (r'^temporary_redirect_view/$', redirect_to, {'url': '/test_client/get_view/', 'permanent': False}),
    (r'^http_redirect_view/$', redirect_to, {'url': '/test_client/secure_view/'}),
    (r'^https_redirect_view/$', redirect_to, {'url': 'https://testserver/test_client/secure_view/'}),
    (r'^double_redirect_view/$', views.double_redirect_view),
    (r'^bad_view/$', views.bad_view),
    (r'^form_view/$', views.form_view),
+6 −0
Original line number Diff line number Diff line
@@ -62,6 +62,12 @@ def redirect_view(request):
        query = ''
    return HttpResponseRedirect('/test_client/get_view/' + query)

def view_with_secure(request):
    "A view that indicates if the request was secure"
    response = HttpResponse()
    response.test_was_secure_request = request.is_secure()
    return response

def double_redirect_view(request):
    "A view that redirects all requests to a redirection view"
    return HttpResponseRedirect('/test_client/permanent_redirect_view/')