From d53ff3f391120aba893e301b95bf6d148208cbb6 Mon Sep 17 00:00:00 2001 From: Peter Coles Date: Sun, 5 Apr 2015 16:59:07 -0400 Subject: [PATCH] unit test for required false nested serializers --- tests/test_serializer_nested.py | 67 +++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/tests/test_serializer_nested.py b/tests/test_serializer_nested.py index f5e4b26ad..103f2588d 100644 --- a/tests/test_serializer_nested.py +++ b/tests/test_serializer_nested.py @@ -38,3 +38,70 @@ class TestNestedSerializer: } serializer = self.Serializer() assert serializer.data == expected_data + + +class TestRequiredFalseNestedSerializer: + def setup(self): + class NestedSerializer(serializers.Serializer): + one = serializers.IntegerField(max_value=10) + + class TestSerializer(serializers.Serializer): + nested = NestedSerializer(required=False) + + self.Serializer = TestSerializer + + class FakeMultiDict(dict): + """ + Use this to fake a `format="multipart"` request, because + `utils.is_html_input()` returns `True` when the dict object has + an attribute of "getlist". + """ + def getlist(self, value, default=None): + if value in self: + return [self[value]] + else: + return [] if default is None else default + + self.FakeMultiDict = FakeMultiDict + + def test_nested_json_validate(self): + input_data = { + 'nested': { + 'one': '1', + }, + } + expected_data = { + 'nested': { + 'one': 1, + }, + } + serializer = self.Serializer(data=input_data) + assert serializer.is_valid() + assert serializer.validated_data == expected_data + + def test_missing_nested_json_validate(self): + input_data = {} + expected_data = {} + serializer = self.Serializer(data=input_data) + assert serializer.is_valid() + assert serializer.validated_data == expected_data + + def test_nested_multipart_validate(self): + input_data = self.FakeMultiDict(**{ + 'nested.one': '1', + }) + expected_data = { + 'nested': { + 'one': 1, + }, + } + serializer = self.Serializer(data=input_data) + assert serializer.is_valid() + assert serializer.validated_data == expected_data + + def test_missing_nested_multipart_validate(self): + input_data = self.FakeMultiDict() + expected_data = {} + serializer = self.Serializer(data=input_data) + assert serializer.is_valid() + assert serializer.validated_data == expected_data