summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJon Dufresne <jon.dufresne@gmail.com>2018-12-27 11:19:55 -0500
committerTim Graham <timograham@gmail.com>2018-12-27 11:19:55 -0500
commit6fe9c45b725cd21eacbb50263bd3449e1a3edf17 (patch)
tree76c94d830c0c1e17d1d7580743908eb0aacc134e /tests
parent293db9eb36e42e8ba976c2639800020d04b95deb (diff)
Fixed #30024 -- Made urlencode() and Client raise TypeError when None is passed as data.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_client/tests.py16
-rw-r--r--tests/utils_tests/test_http.py21
2 files changed, 36 insertions, 1 deletions
diff --git a/tests/test_client/tests.py b/tests/test_client/tests.py
index bb6c8bbff0..432865328f 100644
--- a/tests/test_client/tests.py
+++ b/tests/test_client/tests.py
@@ -59,6 +59,14 @@ class ClientTest(TestCase):
response = self.client.get('/get_view/?var=1\ufffd')
self.assertEqual(response.context['var'], '1\ufffd')
+ def test_get_data_none(self):
+ msg = (
+ 'Cannot encode None in a query string. Did you mean to pass an '
+ 'empty string or omit the value?'
+ )
+ with self.assertRaisesMessage(TypeError, msg):
+ self.client.get('/get_view/', {'value': None})
+
def test_get_post_view(self):
"GET a view that normally expects POSTs"
response = self.client.get('/post_view/', {})
@@ -92,6 +100,14 @@ class ClientTest(TestCase):
self.assertEqual(response.templates[0].name, 'POST Template')
self.assertContains(response, 'Data received')
+ def test_post_data_none(self):
+ msg = (
+ 'Cannot encode None as POST data. Did you mean to pass an empty '
+ 'string or omit the value?'
+ )
+ with self.assertRaisesMessage(TypeError, msg):
+ self.client.post('/post_view/', {'value': None})
+
def test_json_serialization(self):
"""The test client serializes JSON data."""
methods = ('post', 'put', 'patch', 'delete')
diff --git a/tests/utils_tests/test_http.py b/tests/utils_tests/test_http.py
index 93f45fb936..aca825ef1f 100644
--- a/tests/utils_tests/test_http.py
+++ b/tests/utils_tests/test_http.py
@@ -12,7 +12,12 @@ from django.utils.http import (
)
-class URLEncodeTests(unittest.TestCase):
+class URLEncodeTests(SimpleTestCase):
+ cannot_encode_none_msg = (
+ 'Cannot encode None in a query string. Did you mean to pass an '
+ 'empty string or omit the value?'
+ )
+
def test_tuples(self):
self.assertEqual(urlencode((('a', 1), ('b', 2), ('c', 3))), 'a=1&b=2&c=3')
@@ -65,6 +70,20 @@ class URLEncodeTests(unittest.TestCase):
self.assertEqual(urlencode({'a': gen()}, doseq=True), 'a=0&a=1')
self.assertEqual(urlencode({'a': gen()}, doseq=False), 'a=%5B%270%27%2C+%271%27%5D')
+ def test_none(self):
+ with self.assertRaisesMessage(TypeError, self.cannot_encode_none_msg):
+ urlencode({'a': None})
+
+ def test_none_in_sequence(self):
+ with self.assertRaisesMessage(TypeError, self.cannot_encode_none_msg):
+ urlencode({'a': [None]}, doseq=True)
+
+ def test_none_in_generator(self):
+ def gen():
+ yield None
+ with self.assertRaisesMessage(TypeError, self.cannot_encode_none_msg):
+ urlencode({'a': gen()}, doseq=True)
+
class Base36IntTests(SimpleTestCase):
def test_roundtrip(self):