mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-03-03 19:00:17 +03:00
Create separate *NullableOneToOneTests TestCase
This commit is contained in:
parent
213981cef3
commit
a897eb5480
|
@ -206,7 +206,13 @@ class NullableForeignKeySource(RESTFrameworkModel):
|
||||||
target = models.ForeignKey(ForeignKeyTarget, null=True, blank=True,
|
target = models.ForeignKey(ForeignKeyTarget, null=True, blank=True,
|
||||||
related_name='nullable_sources')
|
related_name='nullable_sources')
|
||||||
|
|
||||||
|
|
||||||
|
# OneToOne
|
||||||
|
class OneToOneTarget(RESTFrameworkModel):
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
|
||||||
|
|
||||||
class NullableOneToOneSource(RESTFrameworkModel):
|
class NullableOneToOneSource(RESTFrameworkModel):
|
||||||
name = models.CharField(max_length=100)
|
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')
|
related_name='nullable_source')
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django.db import models
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.compat import patterns, url
|
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):
|
def dummy_view(request, pk):
|
||||||
pass
|
pass
|
||||||
|
@ -13,6 +13,8 @@ urlpatterns = patterns('',
|
||||||
url(r'^foreignkeysource/(?P<pk>[0-9]+)/$', dummy_view, name='foreignkeysource-detail'),
|
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'^foreignkeytarget/(?P<pk>[0-9]+)/$', dummy_view, name='foreignkeytarget-detail'),
|
||||||
url(r'^nullableforeignkeysource/(?P<pk>[0-9]+)/$', dummy_view, name='nullableforeignkeysource-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):
|
class ManyToManyTargetSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
@ -40,18 +42,19 @@ class ForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
# Nullable ForeignKey
|
# Nullable ForeignKey
|
||||||
|
|
||||||
class NullableForeignKeySource(models.Model):
|
|
||||||
name = models.CharField(max_length=100)
|
|
||||||
target = models.ForeignKey(ForeignKeyTarget, null=True, blank=True,
|
|
||||||
related_name='nullable_sources')
|
|
||||||
|
|
||||||
|
|
||||||
class NullableForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer):
|
class NullableForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = NullableForeignKeySource
|
model = NullableForeignKeySource
|
||||||
|
|
||||||
|
|
||||||
|
# OneToOne
|
||||||
|
class NullableOneToOneTargetSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
nullable_source = serializers.HyperlinkedRelatedField(view_name='nullableonetoonesource-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = OneToOneTarget
|
||||||
|
|
||||||
|
|
||||||
# TODO: Add test that .data cannot be accessed prior to .is_valid
|
# TODO: Add test that .data cannot be accessed prior to .is_valid
|
||||||
|
|
||||||
class HyperlinkedManyToManyTests(TestCase):
|
class HyperlinkedManyToManyTests(TestCase):
|
||||||
|
@ -409,3 +412,24 @@ class HyperlinkedNullableForeignKeyTests(TestCase):
|
||||||
# {'id': 2, 'name': u'target-2', 'sources': []},
|
# {'id': 2, 'name': u'target-2', 'sources': []},
|
||||||
# ]
|
# ]
|
||||||
# self.assertEquals(serializer.data, expected)
|
# 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)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from rest_framework import serializers
|
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):
|
class ForeignKeySourceSerializer(serializers.ModelSerializer):
|
||||||
|
@ -28,11 +28,16 @@ class NullableForeignKeySourceSerializer(serializers.ModelSerializer):
|
||||||
model = NullableForeignKeySource
|
model = NullableForeignKeySource
|
||||||
|
|
||||||
|
|
||||||
class NullableForeignKeyTargetSerializer(serializers.ModelSerializer):
|
class NullableOneToOneSourceSerializer(serializers.ModelSerializer):
|
||||||
nullable_source = serializers.PrimaryKeyRelatedField()
|
class Meta:
|
||||||
|
model = NullableOneToOneSource
|
||||||
|
|
||||||
|
|
||||||
|
class NullableOneToOneTargetSerializer(serializers.ModelSerializer):
|
||||||
|
nullable_source = NullableOneToOneSourceSerializer()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ForeignKeyTarget
|
model = OneToOneTarget
|
||||||
|
|
||||||
|
|
||||||
class ReverseForeignKeyTests(TestCase):
|
class ReverseForeignKeyTests(TestCase):
|
||||||
|
@ -74,10 +79,6 @@ class NestedNullableForeignKeyTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
target = ForeignKeyTarget(name='target-1')
|
target = ForeignKeyTarget(name='target-1')
|
||||||
target.save()
|
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):
|
for idx in range(1, 4):
|
||||||
if idx == 3:
|
if idx == 3:
|
||||||
target = None
|
target = None
|
||||||
|
@ -94,11 +95,21 @@ class NestedNullableForeignKeyTests(TestCase):
|
||||||
]
|
]
|
||||||
self.assertEquals(serializer.data, expected)
|
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):
|
def test_reverse_foreign_key_retrieve_with_null(self):
|
||||||
queryset = ForeignKeyTarget.objects.all()
|
queryset = OneToOneTarget.objects.all()
|
||||||
serializer = NullableForeignKeyTargetSerializer(queryset)
|
serializer = NullableOneToOneTargetSerializer(queryset)
|
||||||
expected = [
|
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},
|
{'id': 2, 'name': u'target-2', 'nullable_source': None},
|
||||||
]
|
]
|
||||||
self.assertEquals(serializer.data, expected)
|
self.assertEquals(serializer.data, expected)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from rest_framework import serializers
|
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):
|
class ManyToManyTargetSerializer(serializers.ModelSerializer):
|
||||||
|
@ -33,6 +33,14 @@ class NullableForeignKeySourceSerializer(serializers.ModelSerializer):
|
||||||
model = NullableForeignKeySource
|
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
|
# TODO: Add test that .data cannot be accessed prior to .is_valid
|
||||||
|
|
||||||
class PKManyToManyTests(TestCase):
|
class PKManyToManyTests(TestCase):
|
||||||
|
@ -383,3 +391,22 @@ class PKNullableForeignKeyTests(TestCase):
|
||||||
# {'id': 2, 'name': u'target-2', 'sources': []},
|
# {'id': 2, 'name': u'target-2', 'sources': []},
|
||||||
# ]
|
# ]
|
||||||
# self.assertEquals(serializer.data, expected)
|
# 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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user