diff options
author | Patrick Jenkins <me@patjenk.com> | 2017-08-17 17:10:10 -0700 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-10-18 08:42:51 +0200 |
commit | 46e74a525671f2eef09021c06933c45b49f9d421 (patch) | |
tree | c7f82abf885b0c6f2a410070a93bd574e951f8a2 /tests/test_client_regress | |
parent | 3ca9df51c779510fbbfe296ca95a127d1dec2f87 (diff) | |
download | django-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.py | 21 | ||||
-rw-r--r-- | tests/test_client_regress/urls.py | 2 | ||||
-rw-r--r-- | tests/test_client_regress/views.py | 12 |
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() |