summaryrefslogtreecommitdiff
path: root/tests/test_client_regress
diff options
context:
space:
mode:
authorPatrick Jenkins <me@patjenk.com>2017-08-17 17:10:10 -0700
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-10-18 08:42:51 +0200
commit46e74a525671f2eef09021c06933c45b49f9d421 (patch)
treec7f82abf885b0c6f2a410070a93bd574e951f8a2 /tests/test_client_regress
parent3ca9df51c779510fbbfe296ca95a127d1dec2f87 (diff)
downloaddjango-46e74a525671f2eef09021c06933c45b49f9d421.tar.gz
Fixed #28337 -- Preserved extra headers of requests made with django.test.Client in assertRedirects().
Co-Authored-By: Hasan Ramezani <hasan.r67@gmail.com>
Diffstat (limited to 'tests/test_client_regress')
-rw-r--r--tests/test_client_regress/tests.py21
-rw-r--r--tests/test_client_regress/urls.py2
-rw-r--r--tests/test_client_regress/views.py12
3 files changed, 35 insertions, 0 deletions
diff --git a/tests/test_client_regress/tests.py b/tests/test_client_regress/tests.py
index 0763ae67b1..1a8d069ea1 100644
--- a/tests/test_client_regress/tests.py
+++ b/tests/test_client_regress/tests.py
@@ -508,6 +508,27 @@ class AssertRedirectsTests(SimpleTestCase):
with self.assertRaises(AssertionError):
self.assertRedirects(response, 'http://testserver/secure_view/', status_code=302)
+ def test_redirect_fetch_redirect_response(self):
+ """Preserve extra headers of requests made with django.test.Client."""
+ methods = (
+ 'get', 'post', 'head', 'options', 'put', 'patch', 'delete', 'trace',
+ )
+ for method in methods:
+ with self.subTest(method=method):
+ req_method = getattr(self.client, method)
+ response = req_method(
+ '/redirect_based_on_extra_headers_1/',
+ follow=False,
+ HTTP_REDIRECT='val',
+ )
+ self.assertRedirects(
+ response,
+ '/redirect_based_on_extra_headers_2/',
+ fetch_redirect_response=True,
+ status_code=302,
+ target_status_code=302,
+ )
+
@override_settings(ROOT_URLCONF='test_client_regress.urls')
class AssertFormErrorTests(SimpleTestCase):
diff --git a/tests/test_client_regress/urls.py b/tests/test_client_regress/urls.py
index 8590e5953a..19c9551cc2 100644
--- a/tests/test_client_regress/urls.py
+++ b/tests/test_client_regress/urls.py
@@ -25,6 +25,8 @@ urlpatterns = [
path('circular_redirect_2/', RedirectView.as_view(url='/circular_redirect_3/')),
path('circular_redirect_3/', RedirectView.as_view(url='/circular_redirect_1/')),
path('redirect_other_host/', RedirectView.as_view(url='https://otherserver:8443/no_template_view/')),
+ path('redirect_based_on_extra_headers_1/', views.redirect_based_on_extra_headers_1_view),
+ path('redirect_based_on_extra_headers_2/', views.redirect_based_on_extra_headers_2_view),
path('set_session/', views.set_session_view),
path('check_session/', views.check_session_view),
path('request_methods/', views.request_methods_view),
diff --git a/tests/test_client_regress/views.py b/tests/test_client_regress/views.py
index 94b0ab29a8..db4206ce75 100644
--- a/tests/test_client_regress/views.py
+++ b/tests/test_client_regress/views.py
@@ -154,3 +154,15 @@ def render_template_multiple_times(request):
"""A view that renders a template multiple times."""
return HttpResponse(
render_to_string('base.html') + render_to_string('base.html'))
+
+
+def redirect_based_on_extra_headers_1_view(request):
+ if 'HTTP_REDIRECT' in request.META:
+ return HttpResponseRedirect('/redirect_based_on_extra_headers_2/')
+ return HttpResponse()
+
+
+def redirect_based_on_extra_headers_2_view(request):
+ if 'HTTP_REDIRECT' in request.META:
+ return HttpResponseRedirect('/redirects/further/more/')
+ return HttpResponse()