Support default values being used for empty HTML fields. Closes #3130. · encode/django-rest-framework@d231f36 (original) (raw)
`@@ -4,6 +4,7 @@
`
4
4
``
5
5
`import django
`
6
6
`import pytest
`
``
7
`+
from django.http import QueryDict
`
7
8
`from django.utils import timezone
`
8
9
``
9
10
`import rest_framework
`
`@@ -224,14 +225,6 @@ def test_invalid_error_key(self):
`
224
225
`assert str(exc_info.value) == expected
`
225
226
``
226
227
``
227
``
`-
class MockHTMLDict(dict):
`
228
``
`-
"""
`
229
``
`-
This class mocks up a dictionary like object, that behaves
`
230
``
`-
as if it was returned for multipart or urlencoded data.
`
231
``
`-
"""
`
232
``
`-
getlist = None
`
233
``
-
234
``
-
235
228
`class TestBooleanHTMLInput:
`
236
229
`def setup(self):
`
237
230
`class TestSerializer(serializers.Serializer):
`
`@@ -245,7 +238,7 @@ def test_empty_html_checkbox(self):
`
245
238
` """
`
246
239
`# This class mocks up a dictionary like object, that behaves
`
247
240
`# as if it was returned for multipart or urlencoded data.
`
248
``
`-
serializer = self.Serializer(data=MockHTMLDict())
`
``
241
`+
serializer = self.Serializer(data=QueryDict(''))
`
249
242
`assert serializer.is_valid()
`
250
243
`assert serializer.validated_data == {'archived': False}
`
251
244
``
`@@ -255,39 +248,63 @@ def test_empty_html_charfield(self):
`
255
248
`class TestSerializer(serializers.Serializer):
`
256
249
`message = serializers.CharField(default='happy')
`
257
250
``
258
``
`-
serializer = TestSerializer(data=MockHTMLDict())
`
``
251
`+
serializer = TestSerializer(data=QueryDict(''))
`
259
252
`assert serializer.is_valid()
`
260
253
`assert serializer.validated_data == {'message': 'happy'}
`
261
254
``
``
255
`+
def test_empty_html_integerfield(self):
`
``
256
`+
class TestSerializer(serializers.Serializer):
`
``
257
`+
message = serializers.IntegerField(default=123)
`
``
258
+
``
259
`+
serializer = TestSerializer(data=QueryDict('message='))
`
``
260
`+
assert serializer.is_valid()
`
``
261
`+
assert serializer.validated_data == {'message': 123}
`
``
262
+
``
263
`+
def test_empty_html_uuidfield_with_default(self):
`
``
264
`+
class TestSerializer(serializers.Serializer):
`
``
265
`+
message = serializers.UUIDField(default=uuid.uuid4)
`
``
266
+
``
267
`+
serializer = TestSerializer(data=QueryDict('message='))
`
``
268
`+
assert serializer.is_valid()
`
``
269
`+
assert list(serializer.validated_data.keys()) == ['message']
`
``
270
+
``
271
`+
def test_empty_html_uuidfield_with_optional(self):
`
``
272
`+
class TestSerializer(serializers.Serializer):
`
``
273
`+
message = serializers.UUIDField(required=False)
`
``
274
+
``
275
`+
serializer = TestSerializer(data=QueryDict('message='))
`
``
276
`+
assert serializer.is_valid()
`
``
277
`+
assert list(serializer.validated_data.keys()) == []
`
``
278
+
262
279
`def test_empty_html_charfield_allow_null(self):
`
263
280
`class TestSerializer(serializers.Serializer):
`
264
281
`message = serializers.CharField(allow_null=True)
`
265
282
``
266
``
`-
serializer = TestSerializer(data=MockHTMLDict({'message': ''}))
`
``
283
`+
serializer = TestSerializer(data=QueryDict('message='))
`
267
284
`assert serializer.is_valid()
`
268
285
`assert serializer.validated_data == {'message': None}
`
269
286
``
270
287
`def test_empty_html_datefield_allow_null(self):
`
271
288
`class TestSerializer(serializers.Serializer):
`
272
289
`expiry = serializers.DateField(allow_null=True)
`
273
290
``
274
``
`-
serializer = TestSerializer(data=MockHTMLDict({'expiry': ''}))
`
``
291
`+
serializer = TestSerializer(data=QueryDict('expiry='))
`
275
292
`assert serializer.is_valid()
`
276
293
`assert serializer.validated_data == {'expiry': None}
`
277
294
``
278
295
`def test_empty_html_charfield_allow_null_allow_blank(self):
`
279
296
`class TestSerializer(serializers.Serializer):
`
280
297
`message = serializers.CharField(allow_null=True, allow_blank=True)
`
281
298
``
282
``
`-
serializer = TestSerializer(data=MockHTMLDict({'message': ''}))
`
``
299
`+
serializer = TestSerializer(data=QueryDict('message='))
`
283
300
`assert serializer.is_valid()
`
284
301
`assert serializer.validated_data == {'message': ''}
`
285
302
``
286
303
`def test_empty_html_charfield_required_false(self):
`
287
304
`class TestSerializer(serializers.Serializer):
`
288
305
`message = serializers.CharField(required=False)
`
289
306
``
290
``
`-
serializer = TestSerializer(data=MockHTMLDict())
`
``
307
`+
serializer = TestSerializer(data=QueryDict(''))
`
291
308
`assert serializer.is_valid()
`
292
309
`assert serializer.validated_data == {}
`
293
310
``
`@@ -1116,8 +1133,6 @@ class TestMultipleChoiceField(FieldValues):
`
1116
1133
` )
`
1117
1134
``
1118
1135
`def test_against_partial_and_full_updates(self):
`
1119
``
`-
serializer = self.Serializer(data=MockHTMLDict())
`
1120
``
`-
from django.http import QueryDict
`
1121
1136
`field = serializers.MultipleChoiceField(choices=(('a', 'a'), ('b', 'b')))
`
1122
1137
`field.partial = False
`
1123
1138
`assert field.get_value(QueryDict({})) == []
`