diff options
| author | Tom Christie | 2013-05-18 04:36:00 -0700 | 
|---|---|---|
| committer | Tom Christie | 2013-05-18 04:36:00 -0700 | 
| commit | 6d425aa3be8e94f022af742c2304b6831efcf8c9 (patch) | |
| tree | da1816ad479ce8d73a129388cba8e23c61f0850b /rest_framework/tests/serializer.py | |
| parent | 0c95405ea7d9d93c2f03add3ec8c10afad08b63a (diff) | |
| parent | 24c9c455feaa47487196a2c9343746d7d5bdd962 (diff) | |
| download | django-rest-framework-6d425aa3be8e94f022af742c2304b6831efcf8c9.tar.bz2 | |
Merge pull request #831 from brianz/master
Allow nested fields to be missing
Diffstat (limited to 'rest_framework/tests/serializer.py')
| -rw-r--r-- | rest_framework/tests/serializer.py | 47 | 
1 files changed, 47 insertions, 0 deletions
| diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index c043f417..d0a8570c 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -45,6 +45,17 @@ class CommentSerializer(serializers.Serializer):          return instance +class NamesSerializer(serializers.Serializer): +    first = serializers.CharField() +    last = serializers.CharField(required=False, default='') +    initials = serializers.CharField(required=False, default='') + + +class PersonIdentifierSerializer(serializers.Serializer): +    ssn = serializers.CharField() +    names = NamesSerializer(source='names', required=False) + +  class BookSerializer(serializers.ModelSerializer):      isbn = serializers.RegexField(regex=r'^[0-9]{13}$', error_messages={'invalid': 'isbn has to be exact 13 numbers'}) @@ -155,6 +166,42 @@ class BasicTests(TestCase):          self.assertFalse(serializer.object is expected)          self.assertEqual(serializer.data['sub_comment'], 'And Merry Christmas!') +    def test_create_nested(self): +        """Test a serializer with nested data.""" +        names = {'first': 'John', 'last': 'Doe', 'initials': 'jd'} +        data = {'ssn': '1234567890', 'names': names} +        serializer = PersonIdentifierSerializer(data=data) + +        self.assertEqual(serializer.is_valid(), True) +        self.assertEqual(serializer.object, data) +        self.assertFalse(serializer.object is data) +        self.assertEqual(serializer.data['names'], names) + +    def test_create_partial_nested(self): +        """Test a serializer with nested data which has missing fields.""" +        names = {'first': 'John'} +        data = {'ssn': '1234567890', 'names': names} +        serializer = PersonIdentifierSerializer(data=data) + +        expected_names = {'first': 'John', 'last': '', 'initials': ''} +        data['names'] = expected_names + +        self.assertEqual(serializer.is_valid(), True) +        self.assertEqual(serializer.object, data) +        self.assertFalse(serializer.object is expected_names) +        self.assertEqual(serializer.data['names'], expected_names) + +    def test_null_nested(self): +        """Test a serializer with a nonexistent nested field""" +        data = {'ssn': '1234567890'} +        serializer = PersonIdentifierSerializer(data=data) + +        self.assertEqual(serializer.is_valid(), True) +        self.assertEqual(serializer.object, data) +        self.assertFalse(serializer.object is data) +        expected = {'ssn': '1234567890', 'names': None} +        self.assertEqual(serializer.data, expected) +      def test_update(self):          serializer = CommentSerializer(self.comment, data=self.data)          expected = self.comment | 
