Fixed #11371: Made `django.test.Client.put()` work for non-form-data PUT (i.e. JSON, etc.). Thanks, phyfus.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@11656 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
e32b042d6b
commit
d1da261417
|
@ -362,12 +362,18 @@ class Client(object):
|
||||||
else:
|
else:
|
||||||
post_data = data
|
post_data = data
|
||||||
|
|
||||||
|
# Make `data` into a querystring only if it's not already a string. If
|
||||||
|
# it is a string, we'll assume that the caller has already encoded it.
|
||||||
|
query_string = None
|
||||||
|
if not isinstance(data, basestring):
|
||||||
|
query_string = urlencode(data, doseq=True)
|
||||||
|
|
||||||
parsed = urlparse(path)
|
parsed = urlparse(path)
|
||||||
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': urllib.unquote(parsed[2]),
|
||||||
'QUERY_STRING': urlencode(data, doseq=True) 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),
|
||||||
}
|
}
|
||||||
|
|
|
@ -574,6 +574,23 @@ class RequestMethodTests(TestCase):
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
self.assertEqual(response.content, 'request method: DELETE')
|
self.assertEqual(response.content, 'request method: DELETE')
|
||||||
|
|
||||||
|
class RequestMethodStringDataTests(TestCase):
|
||||||
|
def test_post(self):
|
||||||
|
"Request a view with string data via request method POST"
|
||||||
|
# Regression test for #11371
|
||||||
|
data = u'{"test": "json"}'
|
||||||
|
response = self.client.post('/test_client_regress/request_methods/', data=data, content_type='application/json')
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertEqual(response.content, 'request method: POST')
|
||||||
|
|
||||||
|
def test_put(self):
|
||||||
|
"Request a view with string data via request method PUT"
|
||||||
|
# Regression test for #11371
|
||||||
|
data = u'{"test": "json"}'
|
||||||
|
response = self.client.put('/test_client_regress/request_methods/', data=data, content_type='application/json')
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
self.assertEqual(response.content, 'request method: PUT')
|
||||||
|
|
||||||
class QueryStringTests(TestCase):
|
class QueryStringTests(TestCase):
|
||||||
def test_get_like_requests(self):
|
def test_get_like_requests(self):
|
||||||
for method_name in ('get','head','options','put','delete'):
|
for method_name in ('get','head','options','put','delete'):
|
||||||
|
|
Loading…
Reference in New Issue