Fixed #21740 -- Allowed test client data to be an empty string

This fixes a regression introduced by 2a31d00933.
Thanks tony-zhu for the report.
This commit is contained in:
Claude Paroz 2014-10-20 22:32:43 +02:00
parent edcb33c92e
commit f0bb3c98cc
3 changed files with 19 additions and 3 deletions

View File

@ -279,8 +279,9 @@ class RequestFactory(object):
def get(self, path, data=None, secure=False, **extra): def get(self, path, data=None, secure=False, **extra):
"Construct a GET request." "Construct a GET request."
data = {} if data is None else data
r = { r = {
'QUERY_STRING': urlencode(data or {}, doseq=True), 'QUERY_STRING': urlencode(data, doseq=True),
} }
r.update(extra) r.update(extra)
return self.generic('GET', path, secure=secure, **r) return self.generic('GET', path, secure=secure, **r)
@ -289,7 +290,8 @@ class RequestFactory(object):
secure=False, **extra): secure=False, **extra):
"Construct a POST request." "Construct a POST request."
post_data = self._encode_data(data or {}, content_type) data = {} if data is None else data
post_data = self._encode_data(data, content_type)
return self.generic('POST', path, post_data, content_type, return self.generic('POST', path, post_data, content_type,
secure=secure, **extra) secure=secure, **extra)
@ -297,8 +299,9 @@ class RequestFactory(object):
def head(self, path, data=None, secure=False, **extra): def head(self, path, data=None, secure=False, **extra):
"Construct a HEAD request." "Construct a HEAD request."
data = {} if data is None else data
r = { r = {
'QUERY_STRING': urlencode(data or {}, doseq=True), 'QUERY_STRING': urlencode(data, doseq=True),
} }
r.update(extra) r.update(extra)
return self.generic('HEAD', path, secure=secure, **r) return self.generic('HEAD', path, secure=secure, **r)

View File

@ -129,3 +129,6 @@ Bugfixes
* Fixed :djadmin:`makemigrations` to detect changes to * Fixed :djadmin:`makemigrations` to detect changes to
:attr:`Meta.db_table <django.db.models.Options.db_table>` (:ticket:`23629`). :attr:`Meta.db_table <django.db.models.Options.db_table>` (:ticket:`23629`).
* Fixed a regression when feeding the Django test client with an empty data
string (:ticket:`21740`).

View File

@ -1228,6 +1228,16 @@ class RequestMethodStringDataTests(TestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b'request method: PATCH') self.assertEqual(response.content, b'request method: PATCH')
def test_empty_string_data(self):
"Request a view with empty string data via request method GET/POST/HEAD"
# Regression test for #21740
response = self.client.get('/body/', data='', content_type='application/json')
self.assertEqual(response.content, b'')
response = self.client.post('/body/', data='', content_type='application/json')
self.assertEqual(response.content, b'')
response = self.client.head('/body/', data='', content_type='application/json')
self.assertEqual(response.content, b'')
@override_settings(ROOT_URLCONF='test_client_regress.urls',) @override_settings(ROOT_URLCONF='test_client_regress.urls',)
class QueryStringTests(TestCase): class QueryStringTests(TestCase):