aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/tests
diff options
context:
space:
mode:
authorTom Christie2013-03-12 13:33:02 +0000
committerTom Christie2013-03-12 13:33:02 +0000
commit6b4bb48dd410d0a878b0142d351c7c41cd51f819 (patch)
tree934eb8c69a7c3afd501e2e66929a65dd0d0dfe28 /rest_framework/tests
parent20880232930dd6f3a1de9dda1546c84b9279a258 (diff)
downloaddjango-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.py62
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)