aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_serializer_nested.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_serializer_nested.py')
-rw-r--r--tests/test_serializer_nested.py389
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