mirror of
https://github.com/django/django.git
synced 2024-12-24 10:05:46 +00:00
Fixed #14939: Don't strip ;-parameters from URLs in the test client.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15027 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
f9fba51164
commit
f117b91b41
@ -203,13 +203,20 @@ class RequestFactory(object):
|
|||||||
"Construct a generic request object."
|
"Construct a generic request object."
|
||||||
return WSGIRequest(self._base_environ(**request))
|
return WSGIRequest(self._base_environ(**request))
|
||||||
|
|
||||||
|
def _get_path(self, parsed):
|
||||||
|
# If there are parameters, add them
|
||||||
|
if parsed[3]:
|
||||||
|
return urllib.unquote(parsed[2] + ";" + parsed[3])
|
||||||
|
else:
|
||||||
|
return urllib.unquote(parsed[2])
|
||||||
|
|
||||||
def get(self, path, data={}, **extra):
|
def get(self, path, data={}, **extra):
|
||||||
"Construct a GET request"
|
"Construct a GET request"
|
||||||
|
|
||||||
parsed = urlparse(path)
|
parsed = urlparse(path)
|
||||||
r = {
|
r = {
|
||||||
'CONTENT_TYPE': 'text/html; charset=utf-8',
|
'CONTENT_TYPE': 'text/html; charset=utf-8',
|
||||||
'PATH_INFO': urllib.unquote(parsed[2]),
|
'PATH_INFO': self._get_path(parsed),
|
||||||
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
|
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
|
||||||
'REQUEST_METHOD': 'GET',
|
'REQUEST_METHOD': 'GET',
|
||||||
'wsgi.input': FakePayload('')
|
'wsgi.input': FakePayload('')
|
||||||
@ -236,7 +243,7 @@ class RequestFactory(object):
|
|||||||
r = {
|
r = {
|
||||||
'CONTENT_LENGTH': len(post_data),
|
'CONTENT_LENGTH': len(post_data),
|
||||||
'CONTENT_TYPE': content_type,
|
'CONTENT_TYPE': content_type,
|
||||||
'PATH_INFO': urllib.unquote(parsed[2]),
|
'PATH_INFO': self._get_path(parsed),
|
||||||
'QUERY_STRING': parsed[4],
|
'QUERY_STRING': parsed[4],
|
||||||
'REQUEST_METHOD': 'POST',
|
'REQUEST_METHOD': 'POST',
|
||||||
'wsgi.input': FakePayload(post_data),
|
'wsgi.input': FakePayload(post_data),
|
||||||
@ -250,7 +257,7 @@ class RequestFactory(object):
|
|||||||
parsed = urlparse(path)
|
parsed = urlparse(path)
|
||||||
r = {
|
r = {
|
||||||
'CONTENT_TYPE': 'text/html; charset=utf-8',
|
'CONTENT_TYPE': 'text/html; charset=utf-8',
|
||||||
'PATH_INFO': urllib.unquote(parsed[2]),
|
'PATH_INFO': self._get_path(parsed),
|
||||||
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
|
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
|
||||||
'REQUEST_METHOD': 'HEAD',
|
'REQUEST_METHOD': 'HEAD',
|
||||||
'wsgi.input': FakePayload('')
|
'wsgi.input': FakePayload('')
|
||||||
@ -263,7 +270,7 @@ class RequestFactory(object):
|
|||||||
|
|
||||||
parsed = urlparse(path)
|
parsed = urlparse(path)
|
||||||
r = {
|
r = {
|
||||||
'PATH_INFO': urllib.unquote(parsed[2]),
|
'PATH_INFO': self._get_path(parsed),
|
||||||
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
|
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
|
||||||
'REQUEST_METHOD': 'OPTIONS',
|
'REQUEST_METHOD': 'OPTIONS',
|
||||||
'wsgi.input': FakePayload('')
|
'wsgi.input': FakePayload('')
|
||||||
@ -290,7 +297,7 @@ class RequestFactory(object):
|
|||||||
r = {
|
r = {
|
||||||
'CONTENT_LENGTH': len(post_data),
|
'CONTENT_LENGTH': len(post_data),
|
||||||
'CONTENT_TYPE': content_type,
|
'CONTENT_TYPE': content_type,
|
||||||
'PATH_INFO': urllib.unquote(parsed[2]),
|
'PATH_INFO': self._get_path(parsed),
|
||||||
'QUERY_STRING': query_string or parsed[4],
|
'QUERY_STRING': query_string or parsed[4],
|
||||||
'REQUEST_METHOD': 'PUT',
|
'REQUEST_METHOD': 'PUT',
|
||||||
'wsgi.input': FakePayload(post_data),
|
'wsgi.input': FakePayload(post_data),
|
||||||
@ -303,7 +310,7 @@ class RequestFactory(object):
|
|||||||
|
|
||||||
parsed = urlparse(path)
|
parsed = urlparse(path)
|
||||||
r = {
|
r = {
|
||||||
'PATH_INFO': urllib.unquote(parsed[2]),
|
'PATH_INFO': self._get_path(parsed),
|
||||||
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
|
'QUERY_STRING': urlencode(data, doseq=True) or parsed[4],
|
||||||
'REQUEST_METHOD': 'DELETE',
|
'REQUEST_METHOD': 'DELETE',
|
||||||
'wsgi.input': FakePayload('')
|
'wsgi.input': FakePayload('')
|
||||||
|
@ -269,6 +269,13 @@ class ClientTest(TestCase):
|
|||||||
# Check that the response was a 404
|
# Check that the response was a 404
|
||||||
self.assertEqual(response.status_code, 404)
|
self.assertEqual(response.status_code, 404)
|
||||||
|
|
||||||
|
def test_url_parameters(self):
|
||||||
|
"Make sure that URL ;-parameters are not stripped."
|
||||||
|
response = self.client.get('/test_client/unknown_view/;some-parameter')
|
||||||
|
|
||||||
|
# Check that the path in the response includes it (ignore that it's a 404)
|
||||||
|
self.assertEqual(response.request['PATH_INFO'], '/test_client/unknown_view/;some-parameter')
|
||||||
|
|
||||||
def test_view_with_login(self):
|
def test_view_with_login(self):
|
||||||
"Request a page that is protected with @login_required"
|
"Request a page that is protected with @login_required"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user