Fixed #12011 -- Modified the test client to preserve the request scheme on a redirect. Thanks to tgardner for the report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12419 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
23d3450d5e
commit
79857802b8
|
@ -470,11 +470,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
|
||||
|
|
|
@ -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/')
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -63,6 +63,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/')
|
||||
|
|
Loading…
Reference in New Issue