aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/tests/serializer.py
diff options
context:
space:
mode:
Diffstat (limited to 'rest_framework/tests/serializer.py')
-rw-r--r--rest_framework/tests/serializer.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py
new file mode 100644
index 00000000..16de2c66
--- /dev/null
+++ b/rest_framework/tests/serializer.py
@@ -0,0 +1,117 @@
+import datetime
+from django.test import TestCase
+from rest_framework import serializers
+
+
+class Comment(object):
+ def __init__(self, email, content, created):
+ self.email = email
+ self.content = content
+ self.created = created or datetime.datetime.now()
+
+ def __eq__(self, other):
+ return all([getattr(self, attr) == getattr(other, attr)
+ for attr in ('email', 'content', 'created')])
+
+
+class CommentSerializer(serializers.Serializer):
+ email = serializers.EmailField()
+ content = serializers.CharField(max_length=1000)
+ created = serializers.DateTimeField()
+
+ def restore_object(self, data, instance=None):
+ if instance is None:
+ return Comment(**data)
+ for key, val in data.items():
+ setattr(instance, key, val)
+ return instance
+
+
+class BasicTests(TestCase):
+ def setUp(self):
+ self.comment = Comment(
+ 'tom@example.com',
+ 'Happy new year!',
+ datetime.datetime(2012, 1, 1)
+ )
+ self.data = {
+ 'email': 'tom@example.com',
+ 'content': 'Happy new year!',
+ 'created': datetime.datetime(2012, 1, 1)
+ }
+
+ def test_empty(self):
+ serializer = CommentSerializer()
+ expected = {
+ 'email': '',
+ 'content': '',
+ 'created': None
+ }
+ self.assertEquals(serializer.data, expected)
+
+ def test_serialization(self):
+ serializer = CommentSerializer(instance=self.comment)
+ expected = self.data
+ self.assertEquals(serializer.data, expected)
+
+ def test_deserialization_for_create(self):
+ serializer = CommentSerializer(self.data)
+ expected = self.comment
+ self.assertEquals(serializer.is_valid(), True)
+ self.assertEquals(serializer.object, expected)
+ self.assertFalse(serializer.object is expected)
+
+ def test_deserialization_for_update(self):
+ serializer = CommentSerializer(self.data, instance=self.comment)
+ expected = self.comment
+ self.assertEquals(serializer.is_valid(), True)
+ self.assertEquals(serializer.object, expected)
+ self.assertTrue(serializer.object is expected)
+
+
+class ValidationTests(TestCase):
+ def setUp(self):
+ self.comment = Comment(
+ 'tom@example.com',
+ 'Happy new year!',
+ datetime.datetime(2012, 1, 1)
+ )
+ self.data = {
+ 'email': 'tom@example.com',
+ 'content': 'x' * 1001,
+ 'created': datetime.datetime(2012, 1, 1)
+ }
+
+ def test_deserialization_for_create(self):
+ serializer = CommentSerializer(self.data)
+ self.assertEquals(serializer.is_valid(), False)
+ self.assertEquals(serializer.errors, {'content': [u'Ensure this value has at most 1000 characters (it has 1001).']})
+
+ def test_deserialization_for_update(self):
+ serializer = CommentSerializer(self.data, instance=self.comment)
+ self.assertEquals(serializer.is_valid(), False)
+ self.assertEquals(serializer.errors, {'content': [u'Ensure this value has at most 1000 characters (it has 1001).']})
+
+
+class MetadataTests(TestCase):
+ # def setUp(self):
+ # self.comment = Comment(
+ # 'tomchristie',
+ # 'Happy new year!',
+ # datetime.datetime(2012, 1, 1)
+ # )
+ # self.data = {
+ # 'email': 'tomchristie',
+ # 'content': 'Happy new year!',
+ # 'created': datetime.datetime(2012, 1, 1)
+ # }
+
+ def test_empty(self):
+ serializer = CommentSerializer()
+ expected = {
+ 'email': serializers.CharField,
+ 'content': serializers.CharField,
+ 'created': serializers.DateTimeField
+ }
+ for field_name, field in expected.items():
+ self.assertTrue(isinstance(serializer.data.fields[field_name], field))