mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +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,
 | 
			
		||||
                               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')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,18 +42,19 @@ class ForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
# 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 Meta:
 | 
			
		||||
        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
 | 
			
		||||
 | 
			
		||||
class HyperlinkedManyToManyTests(TestCase):
 | 
			
		||||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user