diff options
| author | Mark Aaron Shirley | 2013-01-07 16:27:31 -0800 | 
|---|---|---|
| committer | Mark Aaron Shirley | 2013-01-07 16:27:31 -0800 | 
| commit | a897eb5480348838b11fdb428ce0d110e8bc8da1 (patch) | |
| tree | 3c919e4ccc69409b154a3da3b0da1d9b389ef145 /rest_framework | |
| parent | 213981cef394c6f7603c24b9a51096ffb56f6024 (diff) | |
| download | django-rest-framework-a897eb5480348838b11fdb428ce0d110e8bc8da1.tar.bz2 | |
Create separate *NullableOneToOneTests TestCase
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/tests/models.py | 8 | ||||
| -rw-r--r-- | rest_framework/tests/relations_hyperlink.py | 38 | ||||
| -rw-r--r-- | rest_framework/tests/relations_nested.py | 33 | ||||
| -rw-r--r-- | rest_framework/tests/relations_pk.py | 29 | 
4 files changed, 88 insertions, 20 deletions
diff --git a/rest_framework/tests/models.py b/rest_framework/tests/models.py index 34cdbff3..93f09761 100644 --- a/rest_framework/tests/models.py +++ b/rest_framework/tests/models.py @@ -206,7 +206,13 @@ class NullableForeignKeySource(RESTFrameworkModel):      target = models.ForeignKey(ForeignKeyTarget, null=True, blank=True,                                 related_name='nullable_sources') + +# OneToOne +class OneToOneTarget(RESTFrameworkModel): +    name = models.CharField(max_length=100) + +  class NullableOneToOneSource(RESTFrameworkModel):      name = models.CharField(max_length=100) -    target = models.OneToOneField(ForeignKeyTarget, null=True, blank=True, +    target = models.OneToOneField(OneToOneTarget, null=True, blank=True,                                    related_name='nullable_source') diff --git a/rest_framework/tests/relations_hyperlink.py b/rest_framework/tests/relations_hyperlink.py index a7f8a035..ef57dc83 100644 --- a/rest_framework/tests/relations_hyperlink.py +++ b/rest_framework/tests/relations_hyperlink.py @@ -2,7 +2,7 @@ from django.db import models  from django.test import TestCase  from rest_framework import serializers  from rest_framework.compat import patterns, url -from rest_framework.tests.models import ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource +from rest_framework.tests.models import ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource, NullableForeignKeySource, OneToOneTarget, NullableOneToOneSource  def dummy_view(request, pk):      pass @@ -13,6 +13,8 @@ urlpatterns = patterns('',      url(r'^foreignkeysource/(?P<pk>[0-9]+)/$', dummy_view, name='foreignkeysource-detail'),      url(r'^foreignkeytarget/(?P<pk>[0-9]+)/$', dummy_view, name='foreignkeytarget-detail'),      url(r'^nullableforeignkeysource/(?P<pk>[0-9]+)/$', dummy_view, name='nullableforeignkeysource-detail'), +    url(r'^onetoonetarget/(?P<pk>[0-9]+)/$', dummy_view, name='onetoonetarget-detail'), +    url(r'^nullableonetoonesource/(?P<pk>[0-9]+)/$', dummy_view, name='nullableonetoonesource-detail'),  )  class ManyToManyTargetSerializer(serializers.HyperlinkedModelSerializer): @@ -40,16 +42,17 @@ class ForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer):  # Nullable ForeignKey +class NullableForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer): +    class Meta: +        model = NullableForeignKeySource -class NullableForeignKeySource(models.Model): -    name = models.CharField(max_length=100) -    target = models.ForeignKey(ForeignKeyTarget, null=True, blank=True, -                               related_name='nullable_sources') +# OneToOne +class NullableOneToOneTargetSerializer(serializers.HyperlinkedModelSerializer): +    nullable_source = serializers.HyperlinkedRelatedField(view_name='nullableonetoonesource-detail') -class NullableForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer):      class Meta: -        model = NullableForeignKeySource +        model = OneToOneTarget  # TODO: Add test that .data cannot be accessed prior to .is_valid @@ -409,3 +412,24 @@ class HyperlinkedNullableForeignKeyTests(TestCase):      #         {'id': 2, 'name': u'target-2', 'sources': []},      #     ]      #     self.assertEquals(serializer.data, expected) + + +class HyperlinkedNullableOneToOneTests(TestCase): +    urls = 'rest_framework.tests.relations_hyperlink' + +    def setUp(self): +        target = OneToOneTarget(name='target-1') +        target.save() +        new_target = OneToOneTarget(name='target-2') +        new_target.save() +        source = NullableOneToOneSource(name='source-1', target=target) +        source.save() + +    def test_reverse_foreign_key_retrieve_with_null(self): +        queryset = OneToOneTarget.objects.all() +        serializer = NullableOneToOneTargetSerializer(queryset) +        expected = [ +            {'url': '/onetoonetarget/1/', 'name': u'target-1', 'nullable_source': '/nullableonetoonesource/1/'}, +            {'url': '/onetoonetarget/2/', 'name': u'target-2', 'nullable_source': None}, +        ] +        self.assertEquals(serializer.data, expected) diff --git a/rest_framework/tests/relations_nested.py b/rest_framework/tests/relations_nested.py index 808399f7..225fee88 100644 --- a/rest_framework/tests/relations_nested.py +++ b/rest_framework/tests/relations_nested.py @@ -1,7 +1,7 @@  from django.db import models  from django.test import TestCase  from rest_framework import serializers -from rest_framework.tests.models import ForeignKeyTarget, ForeignKeySource, NullableForeignKeySource, NullableOneToOneSource +from rest_framework.tests.models import ForeignKeyTarget, ForeignKeySource, NullableForeignKeySource, OneToOneTarget, NullableOneToOneSource  class ForeignKeySourceSerializer(serializers.ModelSerializer): @@ -28,11 +28,16 @@ class NullableForeignKeySourceSerializer(serializers.ModelSerializer):          model = NullableForeignKeySource -class NullableForeignKeyTargetSerializer(serializers.ModelSerializer): -    nullable_source = serializers.PrimaryKeyRelatedField() +class NullableOneToOneSourceSerializer(serializers.ModelSerializer): +    class Meta: +        model = NullableOneToOneSource + + +class NullableOneToOneTargetSerializer(serializers.ModelSerializer): +    nullable_source = NullableOneToOneSourceSerializer()      class Meta: -        model = ForeignKeyTarget +        model = OneToOneTarget  class ReverseForeignKeyTests(TestCase): @@ -74,10 +79,6 @@ class NestedNullableForeignKeyTests(TestCase):      def setUp(self):          target = ForeignKeyTarget(name='target-1')          target.save() -        new_target = ForeignKeyTarget(name='target-2') -        new_target.save() -        one_source = NullableOneToOneSource(name='one-source-1', target=target) -        one_source.save()          for idx in range(1, 4):              if idx == 3:                  target = None @@ -94,11 +95,21 @@ class NestedNullableForeignKeyTests(TestCase):          ]          self.assertEquals(serializer.data, expected) + +class NestedNullableOneToOneTests(TestCase): +    def setUp(self): +        target = OneToOneTarget(name='target-1') +        target.save() +        new_target = OneToOneTarget(name='target-2') +        new_target.save() +        source = NullableOneToOneSource(name='source-1', target=target) +        source.save() +      def test_reverse_foreign_key_retrieve_with_null(self): -        queryset = ForeignKeyTarget.objects.all() -        serializer = NullableForeignKeyTargetSerializer(queryset) +        queryset = OneToOneTarget.objects.all() +        serializer = NullableOneToOneTargetSerializer(queryset)          expected = [ -            {'id': 1, 'name': u'target-1', 'nullable_source': 1}, +            {'id': 1, 'name': u'target-1', 'nullable_source': {'id': 1, 'name': u'source-1', 'target': 1}},              {'id': 2, 'name': u'target-2', 'nullable_source': None},          ]          self.assertEquals(serializer.data, expected) diff --git a/rest_framework/tests/relations_pk.py b/rest_framework/tests/relations_pk.py index af6da2c0..589b3646 100644 --- a/rest_framework/tests/relations_pk.py +++ b/rest_framework/tests/relations_pk.py @@ -1,7 +1,7 @@  from django.db import models  from django.test import TestCase  from rest_framework import serializers -from rest_framework.tests.models import ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource, NullableForeignKeySource +from rest_framework.tests.models import ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource, NullableForeignKeySource, OneToOneTarget, NullableOneToOneSource  class ManyToManyTargetSerializer(serializers.ModelSerializer): @@ -33,6 +33,14 @@ class NullableForeignKeySourceSerializer(serializers.ModelSerializer):          model = NullableForeignKeySource +# OneToOne +class NullableOneToOneTargetSerializer(serializers.ModelSerializer): +    nullable_source = serializers.PrimaryKeyRelatedField() + +    class Meta: +        model = OneToOneTarget + +  # TODO: Add test that .data cannot be accessed prior to .is_valid  class PKManyToManyTests(TestCase): @@ -383,3 +391,22 @@ class PKNullableForeignKeyTests(TestCase):      #         {'id': 2, 'name': u'target-2', 'sources': []},      #     ]      #     self.assertEquals(serializer.data, expected) + + +class PKNullableOneToOneTests(TestCase): +    def setUp(self): +        target = OneToOneTarget(name='target-1') +        target.save() +        new_target = OneToOneTarget(name='target-2') +        new_target.save() +        source = NullableOneToOneSource(name='source-1', target=target) +        source.save() + +    def test_reverse_foreign_key_retrieve_with_null(self): +        queryset = OneToOneTarget.objects.all() +        serializer = NullableOneToOneTargetSerializer(queryset) +        expected = [ +            {'id': 1, 'name': u'target-1', 'nullable_source': 1}, +            {'id': 2, 'name': u'target-2', 'nullable_source': None}, +        ] +        self.assertEquals(serializer.data, expected)  | 
