diff options
Diffstat (limited to 'tests/test_serializer_nested.py')
| -rw-r--r-- | tests/test_serializer_nested.py | 389 | 
1 files changed, 40 insertions, 349 deletions
| diff --git a/tests/test_serializer_nested.py b/tests/test_serializer_nested.py index b0f64ca7..f5e4b26a 100644 --- a/tests/test_serializer_nested.py +++ b/tests/test_serializer_nested.py @@ -1,349 +1,40 @@ -# """ -# Tests to cover nested serializers. - -# Doesn't cover model serializers. -# """ -# from __future__ import unicode_literals -# from django.test import TestCase -# from rest_framework import serializers -# from . import models - - -# class WritableNestedSerializerBasicTests(TestCase): -#     """ -#     Tests for deserializing nested entities. -#     Basic tests that use serializers that simply restore to dicts. -#     """ - -#     def setUp(self): -#         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) - -#         self.AlbumSerializer = AlbumSerializer - -#     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 = self.AlbumSerializer(data=data) -#         self.assertEqual(serializer.is_valid(), True) -#         self.assertEqual(serializer.object, 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 = self.AlbumSerializer(data=data) -#         self.assertEqual(serializer.is_valid(), False) -#         self.assertEqual(serializer.errors, expected_errors) - -#     def test_many_nested_validation_error(self): -#         """ -#         Incorrect nested serialization should return appropriate error data -#         when multiple entities are being deserialized. -#         """ - -#         data = [ -#             { -#                 'album_name': 'Russian Red', -#                 'artist': 'I Love Your Glasses', -#                 'tracks': [ -#                     {'order': 1, 'title': 'Cigarettes', 'duration': 121}, -#                     {'order': 2, 'title': 'No Past Land', 'duration': 198}, -#                     {'order': 3, 'title': 'They Don\'t Believe', 'duration': 191} -#                 ] -#             }, -#             { -#                 '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 = self.AlbumSerializer(data=data, many=True) -#         self.assertEqual(serializer.is_valid(), False) -#         self.assertEqual(serializer.errors, expected_errors) - - -# class WritableNestedSerializerObjectTests(TestCase): -#     """ -#     Tests for deserializing nested entities. -#     These tests use serializers that restore to concrete objects. -#     """ - -#     def setUp(self): -#         # Couple of concrete objects that we're going to deserialize into -#         class Track(object): -#             def __init__(self, order, title, duration): -#                 self.order, self.title, self.duration = order, title, duration - -#             def __eq__(self, other): -#                 return ( -#                     self.order == other.order and -#                     self.title == other.title and -#                     self.duration == other.duration -#                 ) - -#         class Album(object): -#             def __init__(self, album_name, artist, tracks): -#                 self.album_name, self.artist, self.tracks = album_name, artist, tracks - -#             def __eq__(self, other): -#                 return ( -#                     self.album_name == other.album_name and -#                     self.artist == other.artist and -#                     self.tracks == other.tracks -#                 ) - -#         # And their corresponding serializers -#         class TrackSerializer(serializers.Serializer): -#             order = serializers.IntegerField() -#             title = serializers.CharField(max_length=100) -#             duration = serializers.IntegerField() - -#             def restore_object(self, attrs, instance=None): -#                 return Track(attrs['order'], attrs['title'], attrs['duration']) - -#         class AlbumSerializer(serializers.Serializer): -#             album_name = serializers.CharField(max_length=100) -#             artist = serializers.CharField(max_length=100) -#             tracks = TrackSerializer(many=True) - -#             def restore_object(self, attrs, instance=None): -#                 return Album(attrs['album_name'], attrs['artist'], attrs['tracks']) - -#         self.Album, self.Track = Album, Track -#         self.AlbumSerializer = AlbumSerializer - -#     def test_nested_validation_success(self): -#         """ -#         Correct nested serialization should return a restored object -#         that corresponds to 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} -#             ] -#         } -#         expected_object = self.Album( -#             album_name='Discovery', -#             artist='Daft Punk', -#             tracks=[ -#                 self.Track(order=1, title='One More Time', duration=235), -#                 self.Track(order=2, title='Aerodynamic', duration=184), -#                 self.Track(order=3, title='Digital Love', duration=239), -#             ] -#         ) - -#         serializer = self.AlbumSerializer(data=data) -#         self.assertEqual(serializer.is_valid(), True) -#         self.assertEqual(serializer.object, expected_object) - -#     def test_many_nested_validation_success(self): -#         """ -#         Correct nested serialization should return multiple restored objects -#         that corresponds to the input data when multiple objects are -#         being deserialized. -#         """ - -#         data = [ -#             { -#                 'album_name': 'Russian Red', -#                 'artist': 'I Love Your Glasses', -#                 'tracks': [ -#                     {'order': 1, 'title': 'Cigarettes', 'duration': 121}, -#                     {'order': 2, 'title': 'No Past Land', 'duration': 198}, -#                     {'order': 3, 'title': 'They Don\'t Believe', 'duration': 191} -#                 ] -#             }, -#             { -#                 '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} -#                 ] -#             } -#         ] -#         expected_object = [ -#             self.Album( -#                 album_name='Russian Red', -#                 artist='I Love Your Glasses', -#                 tracks=[ -#                     self.Track(order=1, title='Cigarettes', duration=121), -#                     self.Track(order=2, title='No Past Land', duration=198), -#                     self.Track(order=3, title='They Don\'t Believe', duration=191), -#                 ] -#             ), -#             self.Album( -#                 album_name='Discovery', -#                 artist='Daft Punk', -#                 tracks=[ -#                     self.Track(order=1, title='One More Time', duration=235), -#                     self.Track(order=2, title='Aerodynamic', duration=184), -#                     self.Track(order=3, title='Digital Love', duration=239), -#                 ] -#             ) -#         ] - -#         serializer = self.AlbumSerializer(data=data, many=True) -#         self.assertEqual(serializer.is_valid(), True) -#         self.assertEqual(serializer.object, expected_object) - - -# class ForeignKeyNestedSerializerUpdateTests(TestCase): -#     def setUp(self): -#         class Artist(object): -#             def __init__(self, name): -#                 self.name = name - -#             def __eq__(self, other): -#                 return self.name == other.name - -#         class Album(object): -#             def __init__(self, name, artist): -#                 self.name, self.artist = name, artist - -#             def __eq__(self, other): -#                 return self.name == other.name and self.artist == other.artist - -#         class ArtistSerializer(serializers.Serializer): -#             name = serializers.CharField() - -#             def restore_object(self, attrs, instance=None): -#                 if instance: -#                     instance.name = attrs['name'] -#                 else: -#                     instance = Artist(attrs['name']) -#                 return instance - -#         class AlbumSerializer(serializers.Serializer): -#             name = serializers.CharField() -#             by = ArtistSerializer(source='artist') - -#             def restore_object(self, attrs, instance=None): -#                 if instance: -#                     instance.name = attrs['name'] -#                     instance.artist = attrs['artist'] -#                 else: -#                     instance = Album(attrs['name'], attrs['artist']) -#                 return instance - -#         self.Artist = Artist -#         self.Album = Album -#         self.AlbumSerializer = AlbumSerializer - -#     def test_create_via_foreign_key_with_source(self): -#         """ -#         Check that we can both *create* and *update* into objects across -#         ForeignKeys that have a `source` specified. -#         Regression test for #1170 -#         """ -#         data = { -#             'name': 'Discovery', -#             'by': {'name': 'Daft Punk'}, -#         } - -#         expected = self.Album(artist=self.Artist('Daft Punk'), name='Discovery') - -#         # create -#         serializer = self.AlbumSerializer(data=data) -#         self.assertEqual(serializer.is_valid(), True) -#         self.assertEqual(serializer.object, expected) - -#         # update -#         original = self.Album(artist=self.Artist('The Bats'), name='Free All the Monsters') -#         serializer = self.AlbumSerializer(instance=original, data=data) -#         self.assertEqual(serializer.is_valid(), True) -#         self.assertEqual(serializer.object, expected) - - -# class NestedModelSerializerUpdateTests(TestCase): -#     def test_second_nested_level(self): -#         john = models.Person.objects.create(name="john") - -#         post = john.blogpost_set.create(title="Test blog post") -#         post.blogpostcomment_set.create(text="I hate this blog post") -#         post.blogpostcomment_set.create(text="I love this blog post") - -#         class BlogPostCommentSerializer(serializers.ModelSerializer): -#             class Meta: -#                 model = models.BlogPostComment - -#         class BlogPostSerializer(serializers.ModelSerializer): -#             comments = BlogPostCommentSerializer(many=True, source='blogpostcomment_set') - -#             class Meta: -#                 model = models.BlogPost -#                 fields = ('id', 'title', 'comments') - -#         class PersonSerializer(serializers.ModelSerializer): -#             posts = BlogPostSerializer(many=True, source='blogpost_set') - -#             class Meta: -#                 model = models.Person -#                 fields = ('id', 'name', 'age', 'posts') - -#         serialize = PersonSerializer(instance=john) -#         deserialize = PersonSerializer(data=serialize.data, instance=john) -#         self.assertTrue(deserialize.is_valid()) - -#         result = deserialize.object -#         result.save() -#         self.assertEqual(result.id, john.id) +from rest_framework import serializers + + +class TestNestedSerializer: +    def setup(self): +        class NestedSerializer(serializers.Serializer): +            one = serializers.IntegerField(max_value=10) +            two = serializers.IntegerField(max_value=10) + +        class TestSerializer(serializers.Serializer): +            nested = NestedSerializer() + +        self.Serializer = TestSerializer + +    def test_nested_validate(self): +        input_data = { +            'nested': { +                'one': '1', +                'two': '2', +            } +        } +        expected_data = { +            'nested': { +                'one': 1, +                'two': 2, +            } +        } +        serializer = self.Serializer(data=input_data) +        assert serializer.is_valid() +        assert serializer.validated_data == expected_data + +    def test_nested_serialize_empty(self): +        expected_data = { +            'nested': { +                'one': None, +                'two': None +            } +        } +        serializer = self.Serializer() +        assert serializer.data == expected_data | 
