summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAhmad A. Hussein <ahmadahussein0@gmail.com>2020-05-27 09:16:01 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-05-27 10:36:52 +0200
commit6425fd3124e50219ba0b6f545d1bf7edfb053a59 (patch)
tree5282a6707d411f803edf6538f376115c83a35ebd
parent9d55ae00d3dad9e93714add69ab7e48e7b0bcafa (diff)
Refs #31494 -- Added test for query strings for GET/HEAD requests when following HTTP 307/308 redirects in test client.
-rw-r--r--tests/test_client/tests.py14
-rw-r--r--tests/test_client/urls.py8
-rw-r--r--tests/test_client/views.py8
3 files changed, 30 insertions, 0 deletions
diff --git a/tests/test_client/tests.py b/tests/test_client/tests.py
index 93ac3e37a7..0b63a3fed5 100644
--- a/tests/test_client/tests.py
+++ b/tests/test_client/tests.py
@@ -284,6 +284,20 @@ class ClientTest(TestCase):
self.assertEqual(response.request['PATH_INFO'], '/post_view/')
self.assertEqual(response.request['REQUEST_METHOD'], method.upper())
+ def test_follow_307_and_308_get_head_query_string(self):
+ methods = ('get', 'head')
+ codes = (307, 308)
+ for method, code in itertools.product(methods, codes):
+ with self.subTest(method=method, code=code):
+ req_method = getattr(self.client, method)
+ response = req_method(
+ '/redirect_view_%s_query_string/' % code,
+ data={'value': 'test'},
+ follow=True,
+ )
+ self.assertRedirects(response, '/post_view/?hello=world', status_code=code)
+ self.assertEqual(response.request['QUERY_STRING'], 'value=test')
+
def test_follow_307_and_308_preserves_post_data(self):
for code in (307, 308):
with self.subTest(code=code):
diff --git a/tests/test_client/urls.py b/tests/test_client/urls.py
index 16cca52c38..1bc552ba5d 100644
--- a/tests/test_client/urls.py
+++ b/tests/test_client/urls.py
@@ -14,7 +14,15 @@ urlpatterns = [
path('raw_post_view/', views.raw_post_view),
path('redirect_view/', views.redirect_view),
path('redirect_view_307/', views.method_saving_307_redirect_view),
+ path(
+ 'redirect_view_307_query_string/',
+ views.method_saving_307_redirect_query_string_view,
+ ),
path('redirect_view_308/', views.method_saving_308_redirect_view),
+ path(
+ 'redirect_view_308_query_string/',
+ views.method_saving_308_redirect_query_string_view,
+ ),
path('secure_view/', views.view_with_secure),
path('permanent_redirect_view/', RedirectView.as_view(url='/get_view/', permanent=True)),
path('temporary_redirect_view/', RedirectView.as_view(url='/get_view/', permanent=False)),
diff --git a/tests/test_client/views.py b/tests/test_client/views.py
index b56ea458a2..034ca6908c 100644
--- a/tests/test_client/views.py
+++ b/tests/test_client/views.py
@@ -131,6 +131,14 @@ def redirect_view(request):
return HttpResponseRedirect('/get_view/' + query)
+def method_saving_307_redirect_query_string_view(request):
+ return HttpResponseRedirect('/post_view/?hello=world', status=307)
+
+
+def method_saving_308_redirect_query_string_view(request):
+ return HttpResponseRedirect('/post_view/?hello=world', status=308)
+
+
def _post_view_redirect(request, status_code):
"""Redirect to /post_view/ using the status code."""
redirect_to = request.GET.get('to', '/post_view/')