From cb42b995fa01aa3add2bd3da34d61723bc163fdc Mon Sep 17 00:00:00 2001 From: Christopher Adams Date: Sun, 13 Sep 2015 01:08:05 -0400 Subject: [PATCH] Proof of bug #2761 - When not submitting key for list fields or multiple choice, partial serialization should result in empty state (key not there), not an empty list. --- tests/test_serializer_lists.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/test_serializer_lists.py b/tests/test_serializer_lists.py index e9234d8f7d..607ddba04a 100644 --- a/tests/test_serializer_lists.py +++ b/tests/test_serializer_lists.py @@ -289,3 +289,32 @@ class Meta: serializer = TestSerializer(data=[], many=True) assert not serializer.is_valid() assert serializer.errors == {'non_field_errors': ['Non field error']} + + +class TestSerializerPartialUsage: + """ + When not submitting key for list fields or multiple choice, partial + serialization should result in an empty state (key not there), not + an empty list. + + Regression test for Github issue #2761. + """ + def test_partial_listfield(self): + class ListSerializer(serializers.Serializer): + listdata = serializers.ListField() + serializer = ListSerializer(data=MultiValueDict(), partial=True) + result = serializer.to_internal_value(data={}) + assert "listdata" not in result + assert serializer.is_valid() + assert serializer.validated_data == {} + assert serializer.errors == {} + + def test_partial_multiplechoice(self): + class MultipleChoiceSerializer(serializers.Serializer): + multiplechoice = serializers.MultipleChoiceField(choices=[1, 2, 3]) + serializer = MultipleChoiceSerializer(data=MultiValueDict(), partial=True) + result = serializer.to_internal_value(data={}) + assert "multiplechoice" not in result + assert serializer.is_valid() + assert serializer.validated_data == {} + assert serializer.errors == {}