From 2159bfd877ea7497aaee5f3069d6667f75168ef6 Mon Sep 17 00:00:00 2001 From: Pravin Kamble Date: Tue, 25 Nov 2025 14:58:48 +0530 Subject: [PATCH] Added Test for expected behaviour --- tests/test_serializer_lists.py | 81 ++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/tests/test_serializer_lists.py b/tests/test_serializer_lists.py index f76451a5a..95886210f 100644 --- a/tests/test_serializer_lists.py +++ b/tests/test_serializer_lists.py @@ -775,3 +775,84 @@ class TestToRepresentationManagerCheck: queryset = NullableOneToOneSource.objects.all() serializer = self.serializer(queryset, many=True) assert serializer.data + + +class TestListSerializerDictErrorBehavior: + """ + Tests for the proposed dict-based error structure for ListSerializer, + and consistency with ListField. + + https://github.com/encode/django-rest-framework/issues/7279 + """ + + def setup_method(self): + class SampleSerializer(serializers.Serializer): + num = serializers.BooleanField() + + class ChildSerializer(serializers.Serializer): + num = serializers.BooleanField() + + class WrapperSerializer(serializers.Serializer): + list_serializer = ChildSerializer(many=True) + list_field = serializers.ListField( + child=serializers.DictField(allow_empty=False) + ) + + self.SampleSerializer = SampleSerializer + self.WrapperSerializer = WrapperSerializer + + def test_listserializer_dict_error_format(self): + + data = [ + {"num": "1"}, + {"num": "x"}, + {"num": "0"}, + {"num": "hello"}, + ] + + serializer = self.SampleSerializer(data=data, many=True) + serializer.is_valid() + + errors = serializer.errors + assert isinstance(errors, dict) + for _, value in errors.items(): + assert value == { + "num": [ErrorDetail(string="Must be a valid boolean.", code="invalid")] + } + + + + def test_listserializer_and_listfield_consistency(self): + + data = { + "list_serializer": [ + {"num": "1"}, + {"num": "wrong"}, + {"num": "0"}, + {"num": ""}, + ], + "list_field": [ + {"ok": "x"}, + {}, + {"valid": "y"}, + {}, + ], + } + + serializer = self.WrapperSerializer(data=data) + serializer.is_valid() + + errors = serializer.errors + + assert isinstance(errors["list_serializer"], dict) + assert isinstance(errors["list_field"], dict) + + assert set(errors["list_serializer"].keys()) == {0, 1,} + assert set(errors["list_field"].keys()) == {1, 3} + + assert errors["list_serializer"][1] == { + "num": [ErrorDetail(string="Must be a valid boolean.", code="invalid")] + } + + for index, value in errors["list_field"].items(): + assert value == [ErrorDetail(string='This dictionary may not be empty.', code='empty')]