diff options
| author | Tom Christie | 2013-03-12 13:33:02 +0000 | 
|---|---|---|
| committer | Tom Christie | 2013-03-12 13:33:02 +0000 | 
| commit | 6b4bb48dd410d0a878b0142d351c7c41cd51f819 (patch) | |
| tree | 934eb8c69a7c3afd501e2e66929a65dd0d0dfe28 /rest_framework/tests | |
| parent | 20880232930dd6f3a1de9dda1546c84b9279a258 (diff) | |
| download | django-rest-framework-6b4bb48dd410d0a878b0142d351c7c41cd51f819.tar.bz2 | |
Initial support for writable nested serialization (Not ModelSerializer)
Diffstat (limited to 'rest_framework/tests')
| -rw-r--r-- | rest_framework/tests/serializer_nested.py | 62 | 
1 files changed, 62 insertions, 0 deletions
diff --git a/rest_framework/tests/serializer_nested.py b/rest_framework/tests/serializer_nested.py new file mode 100644 index 00000000..c8987bc5 --- /dev/null +++ b/rest_framework/tests/serializer_nested.py @@ -0,0 +1,62 @@ +from __future__ import unicode_literals +from django.test import TestCase +from rest_framework import serializers + + +class TrackSerializer(serializers.Serializer): +    order = serializers.IntegerField() +    title = serializers.CharField(max_length=100) +    duration = serializers.IntegerField() + + +class AlbumSerializer(serializers.Serializer): +    album_name = serializers.CharField(max_length=100) +    artist = serializers.CharField(max_length=100) +    tracks = TrackSerializer(many=True) + + +class NestedSerializerTestCase(TestCase): +    def test_nested_validation_success(self): +        """ +        Correct nested serialization should return the input data. +        """ + +        data = { +            'album_name': 'Discovery', +            'artist': 'Daft Punk', +            'tracks': [ +                {'order': 1, 'title': 'One More Time', 'duration': 235}, +                {'order': 2, 'title': 'Aerodynamic', 'duration': 184}, +                {'order': 3, 'title': 'Digital Love', 'duration': 239} +            ] +        } + +        serializer = AlbumSerializer(data=data) +        self.assertEqual(serializer.is_valid(), True) +        self.assertEqual(serializer.data, data) + +    def test_nested_validation_error(self): +        """ +        Incorrect nested serialization should return appropriate error data. +        """ + +        data = { +            'album_name': 'Discovery', +            'artist': 'Daft Punk', +            'tracks': [ +                {'order': 1, 'title': 'One More Time', 'duration': 235}, +                {'order': 2, 'title': 'Aerodynamic', 'duration': 184}, +                {'order': 3, 'title': 'Digital Love', 'duration': 'foobar'} +            ] +        } +        expected_errors = { +            'tracks': [ +                {}, +                {}, +                {'duration': ['Enter a whole number.']} +            ] +        } + +        serializer = AlbumSerializer(data=data) +        self.assertEqual(serializer.is_valid(), False) +        self.assertEqual(serializer.errors, expected_errors)  | 
