aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/tests
diff options
context:
space:
mode:
authorTom Christie2011-06-14 18:22:13 +0100
committerTom Christie2011-06-14 18:22:13 +0100
commit412b5fc2d54def2f2601b860b80afaa52d595e58 (patch)
treeb700e41c2d17a52d4726da7f62027c50f391b5e9 /djangorestframework/tests
parent323d52e7c44c208dce545a8084f7401384fd731e (diff)
downloaddjango-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')
-rw-r--r--djangorestframework/tests/resources.py60
-rw-r--r--djangorestframework/tests/serializer.py127
-rw-r--r--djangorestframework/tests/validators.py12
3 files changed, 135 insertions, 64 deletions
diff --git a/djangorestframework/tests/resources.py b/djangorestframework/tests/resources.py
deleted file mode 100644
index 088e3159..00000000
--- a/djangorestframework/tests/resources.py
+++ /dev/null
@@ -1,60 +0,0 @@
-"""Tests for the resource module"""
-from django.test import TestCase
-from djangorestframework.resources import _object_to_data
-
-from django.db import models
-
-import datetime
-import decimal
-
-class TestObjectToData(TestCase):
- """Tests for the _object_to_data function"""
-
- def test_decimal(self):
- """Decimals need to be converted to a string representation."""
- self.assertEquals(_object_to_data(decimal.Decimal('1.5')), '1.5')
-
- def test_function(self):
- """Functions with no arguments should be called."""
- def foo():
- return 1
- self.assertEquals(_object_to_data(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(_object_to_data(Foo().foo), 1)
-
- def test_datetime(self):
- """datetime objects are left as-is."""
- now = datetime.datetime.now()
- self.assertEquals(_object_to_data(now), now)
-
- def test_tuples(self):
- """ Test tuple serialisation """
- 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)
-
- m1 = M1(field1='foo', field2='bar')
- m2 = M2(field=m1)
- m3 = M3(field=m1)
-
- Resource = type('Resource', (object,), {'fields':(), 'include':(), 'exclude':()})
-
- r = Resource()
- r.fields = (('field', ('field1')),)
-
- self.assertEqual(_object_to_data(m2, r), dict(field=dict(field1=u'foo')))
-
- r.fields = (('field', ('field2')),)
- self.assertEqual(_object_to_data(m3, r), dict(field=dict(field2=u'bar')))
-
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'}})
diff --git a/djangorestframework/tests/validators.py b/djangorestframework/tests/validators.py
index a1e5d2d7..45b75c4f 100644
--- a/djangorestframework/tests/validators.py
+++ b/djangorestframework/tests/validators.py
@@ -75,7 +75,8 @@ class TestNonFieldErrors(TestCase):
return self.cleaned_data #pragma: no cover
class MockResource(FormResource):
- form = MockForm
+ class Meta:
+ form = MockForm
class MockView(View):
pass
@@ -99,10 +100,12 @@ class TestFormValidation(TestCase):
qwerty = forms.CharField(required=True)
class MockFormResource(FormResource):
- form = MockForm
+ class Meta:
+ form = MockForm
class MockModelResource(ModelResource):
- form = MockForm
+ class Meta:
+ form = MockForm
class MockFormView(View):
resource = MockFormResource
@@ -275,7 +278,8 @@ class TestModelFormValidator(TestCase):
return 'read only'
class MockResource(ModelResource):
- model = MockModel
+ class Meta:
+ model = MockModel
class MockView(View):
resource = MockResource