diff options
| author | Tom Christie | 2011-06-14 18:22:13 +0100 |
|---|---|---|
| committer | Tom Christie | 2011-06-14 18:22:13 +0100 |
| commit | 412b5fc2d54def2f2601b860b80afaa52d595e58 (patch) | |
| tree | b700e41c2d17a52d4726da7f62027c50f391b5e9 /djangorestframework/tests/serializer.py | |
| parent | 323d52e7c44c208dce545a8084f7401384fd731e (diff) | |
| download | django-rest-framework-412b5fc2d54def2f2601b860b80afaa52d595e58.tar.bz2 | |
Support for nesting resources etc...
--HG--
rename : djangorestframework/tests/resources.py => djangorestframework/tests/serializer.py
Diffstat (limited to 'djangorestframework/tests/serializer.py')
| -rw-r--r-- | djangorestframework/tests/serializer.py | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/djangorestframework/tests/serializer.py b/djangorestframework/tests/serializer.py new file mode 100644 index 00000000..cf00b104 --- /dev/null +++ b/djangorestframework/tests/serializer.py @@ -0,0 +1,127 @@ +"""Tests for the resource module""" +from django.test import TestCase +from djangorestframework.serializer import Serializer + +from django.db import models + +import datetime +import decimal + +class TestObjectToData(TestCase): + """ + Tests for the Serializer class. + """ + + def setUp(self): + self.serializer = Serializer() + self.serialize = self.serializer.serialize + + def test_decimal(self): + """Decimals need to be converted to a string representation.""" + self.assertEquals(self.serialize(decimal.Decimal('1.5')), '1.5') + + def test_function(self): + """Functions with no arguments should be called.""" + def foo(): + return 1 + self.assertEquals(self.serialize(foo), 1) + + def test_method(self): + """Methods with only a ``self`` argument should be called.""" + class Foo(object): + def foo(self): + return 1 + self.assertEquals(self.serialize(Foo().foo), 1) + + def test_datetime(self): + """ + datetime objects are left as-is. + """ + now = datetime.datetime.now() + self.assertEquals(self.serialize(now), now) + + +class TestFieldNesting(TestCase): + """ + Test nesting the fields in the Serializer class + """ + def setUp(self): + self.serializer = Serializer() + self.serialize = self.serializer.serialize + + class M1(models.Model): + field1 = models.CharField() + field2 = models.CharField() + + class M2(models.Model): + field = models.OneToOneField(M1) + + class M3(models.Model): + field = models.ForeignKey(M1) + + self.m1 = M1(field1='foo', field2='bar') + self.m2 = M2(field=self.m1) + self.m3 = M3(field=self.m1) + + + def test_tuple_nesting(self): + """ + Test tuple nesting on `fields` attr + """ + class SerializerM2(Serializer): + class Meta: + fields = (('field', ('field1',)),) + + class SerializerM3(Serializer): + class Meta: + fields = (('field', ('field2',)),) + + self.assertEqual(SerializerM2().serialize(self.m2), {'field': {'field1': u'foo'}}) + self.assertEqual(SerializerM3().serialize(self.m3), {'field': {'field2': u'bar'}}) + + + def test_serializer_class_nesting(self): + """ + Test related model serialization + """ + class NestedM2(Serializer): + class Meta: + fields = ('field1', ) + + class NestedM3(Serializer): + class Meta: + fields = ('field2', ) + + class SerializerM2(Serializer): + class Meta: + fields = [('field', NestedM2)] + + class SerializerM3(Serializer): + class Meta: + fields = [('field', NestedM3)] + + self.assertEqual(SerializerM2().serialize(self.m2), {'field': {'field1': u'foo'}}) + self.assertEqual(SerializerM3().serialize(self.m3), {'field': {'field2': u'bar'}}) + + def test_serializer_classname_nesting(self): + """ + Test related model serialization + """ + class SerializerM2(Serializer): + class Meta: + fields = [('field', 'NestedM2')] + + class SerializerM3(Serializer): + class Meta: + fields = [('field', 'NestedM3')] + + class NestedM2(Serializer): + class Meta: + fields = ('field1', ) + + class NestedM3(Serializer): + class Meta: + fields = ('field2', ) + + self.assertEqual(SerializerM2().serialize(self.m2), {'field': {'field1': u'foo'}}) + self.assertEqual(SerializerM3().serialize(self.m3), {'field': {'field2': u'bar'}}) |
