diff options
Diffstat (limited to 'tests/test_relations_pk.py')
| -rw-r--r-- | tests/test_relations_pk.py | 192 | 
1 files changed, 95 insertions, 97 deletions
| diff --git a/tests/test_relations_pk.py b/tests/test_relations_pk.py index e3f836ed..ba5f6c17 100644 --- a/tests/test_relations_pk.py +++ b/tests/test_relations_pk.py @@ -1,10 +1,9 @@  from __future__ import unicode_literals -from django.db import models  from django.test import TestCase  from django.utils import six  from rest_framework import serializers  from tests.models import ( -    BlogPost, ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource, +    ManyToManyTarget, ManyToManySource, ForeignKeyTarget, ForeignKeySource,      NullableForeignKeySource, OneToOneTarget, NullableOneToOneSource,  ) @@ -69,7 +68,8 @@ class PKManyToManyTests(TestCase):              {'id': 2, 'name': 'source-2', 'targets': [1, 2]},              {'id': 3, 'name': 'source-3', 'targets': [1, 2, 3]}          ] -        self.assertEqual(serializer.data, expected) +        with self.assertNumQueries(4): +            self.assertEqual(serializer.data, expected)      def test_reverse_many_to_many_retrieve(self):          queryset = ManyToManyTarget.objects.all() @@ -79,7 +79,8 @@ class PKManyToManyTests(TestCase):              {'id': 2, 'name': 'target-2', 'sources': [2, 3]},              {'id': 3, 'name': 'target-3', 'sources': [3]}          ] -        self.assertEqual(serializer.data, expected) +        with self.assertNumQueries(4): +            self.assertEqual(serializer.data, expected)      def test_many_to_many_update(self):          data = {'id': 1, 'name': 'source-1', 'targets': [1, 2, 3]} @@ -128,7 +129,6 @@ class PKManyToManyTests(TestCase):          # Ensure source 4 is added, and everything else is as expected          queryset = ManyToManySource.objects.all()          serializer = ManyToManySourceSerializer(queryset, many=True) -        self.assertFalse(serializer.fields['targets'].read_only)          expected = [              {'id': 1, 'name': 'source-1', 'targets': [1]},              {'id': 2, 'name': 'source-2', 'targets': [1, 2]}, @@ -140,7 +140,6 @@ class PKManyToManyTests(TestCase):      def test_reverse_many_to_many_create(self):          data = {'id': 4, 'name': 'target-4', 'sources': [1, 3]}          serializer = ManyToManyTargetSerializer(data=data) -        self.assertFalse(serializer.fields['sources'].read_only)          self.assertTrue(serializer.is_valid())          obj = serializer.save()          self.assertEqual(serializer.data, data) @@ -176,7 +175,8 @@ class PKForeignKeyTests(TestCase):              {'id': 2, 'name': 'source-2', 'target': 1},              {'id': 3, 'name': 'source-3', 'target': 1}          ] -        self.assertEqual(serializer.data, expected) +        with self.assertNumQueries(1): +            self.assertEqual(serializer.data, expected)      def test_reverse_foreign_key_retrieve(self):          queryset = ForeignKeyTarget.objects.all() @@ -185,15 +185,16 @@ class PKForeignKeyTests(TestCase):              {'id': 1, 'name': 'target-1', 'sources': [1, 2, 3]},              {'id': 2, 'name': 'target-2', 'sources': []},          ] -        self.assertEqual(serializer.data, expected) +        with self.assertNumQueries(3): +            self.assertEqual(serializer.data, expected)      def test_foreign_key_update(self):          data = {'id': 1, 'name': 'source-1', 'target': 2}          instance = ForeignKeySource.objects.get(pk=1)          serializer = ForeignKeySourceSerializer(instance, data=data)          self.assertTrue(serializer.is_valid()) -        self.assertEqual(serializer.data, data)          serializer.save() +        self.assertEqual(serializer.data, data)          # Ensure source 1 is updated, and everything else is as expected          queryset = ForeignKeySource.objects.all() @@ -210,7 +211,7 @@ class PKForeignKeyTests(TestCase):          instance = ForeignKeySource.objects.get(pk=1)          serializer = ForeignKeySourceSerializer(instance, data=data)          self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'target': ['Incorrect type.  Expected pk value, received %s.' % six.text_type.__name__]}) +        self.assertEqual(serializer.errors, {'target': ['Incorrect type. Expected pk value, received %s.' % six.text_type.__name__]})      def test_reverse_foreign_key_update(self):          data = {'id': 2, 'name': 'target-2', 'sources': [1, 3]} @@ -281,7 +282,7 @@ class PKForeignKeyTests(TestCase):          instance = ForeignKeySource.objects.get(pk=1)          serializer = ForeignKeySourceSerializer(instance, data=data)          self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'target': ['This field is required.']}) +        self.assertEqual(serializer.errors, {'target': ['This field may not be null.']})      def test_foreign_key_with_empty(self):          """ @@ -361,8 +362,8 @@ class PKNullableForeignKeyTests(TestCase):          instance = NullableForeignKeySource.objects.get(pk=1)          serializer = NullableForeignKeySourceSerializer(instance, data=data)          self.assertTrue(serializer.is_valid()) -        self.assertEqual(serializer.data, data)          serializer.save() +        self.assertEqual(serializer.data, data)          # Ensure source 1 is updated, and everything else is as expected          queryset = NullableForeignKeySource.objects.all() @@ -384,8 +385,8 @@ class PKNullableForeignKeyTests(TestCase):          instance = NullableForeignKeySource.objects.get(pk=1)          serializer = NullableForeignKeySourceSerializer(instance, data=data)          self.assertTrue(serializer.is_valid()) -        self.assertEqual(serializer.data, expected_data)          serializer.save() +        self.assertEqual(serializer.data, expected_data)          # Ensure source 1 is updated, and everything else is as expected          queryset = NullableForeignKeySource.objects.all() @@ -443,109 +444,106 @@ class PKNullableOneToOneTests(TestCase):  # set to read only -class ManyToManyThroughTarget(models.Model): -    name = models.CharField(max_length=100) +# class ManyToManyThroughTarget(models.Model): +#     name = models.CharField(max_length=100) -class ManyToManyThrough(models.Model): -    source = models.ForeignKey('ManyToManyThroughSource') -    target = models.ForeignKey(ManyToManyThroughTarget) +# class ManyToManyThrough(models.Model): +#     source = models.ForeignKey('ManyToManyThroughSource') +#     target = models.ForeignKey(ManyToManyThroughTarget) -class ManyToManyThroughSource(models.Model): -    name = models.CharField(max_length=100) -    targets = models.ManyToManyField(ManyToManyThroughTarget, -                                     related_name='sources', -                                     through='ManyToManyThrough') +# class ManyToManyThroughSource(models.Model): +#     name = models.CharField(max_length=100) +#     targets = models.ManyToManyField(ManyToManyThroughTarget, +#                                      related_name='sources', +#                                      through='ManyToManyThrough') -class ManyToManyThroughTargetSerializer(serializers.ModelSerializer): -    class Meta: -        model = ManyToManyThroughTarget -        fields = ('id', 'name', 'sources') +# class ManyToManyThroughTargetSerializer(serializers.ModelSerializer): +#     class Meta: +#         model = ManyToManyThroughTarget +#         fields = ('id', 'name', 'sources') -class ManyToManyThroughSourceSerializer(serializers.ModelSerializer): -    class Meta: -        model = ManyToManyThroughSource -        fields = ('id', 'name', 'targets') +# class ManyToManyThroughSourceSerializer(serializers.ModelSerializer): +#     class Meta: +#         model = ManyToManyThroughSource +#         fields = ('id', 'name', 'targets') -class PKManyToManyThroughTests(TestCase): -    def setUp(self): -        self.source = ManyToManyThroughSource.objects.create( -            name='through-source-1') -        self.target = ManyToManyThroughTarget.objects.create( -            name='through-target-1') +# class PKManyToManyThroughTests(TestCase): +#     def setUp(self): +#         self.source = ManyToManyThroughSource.objects.create( +#             name='through-source-1') +#         self.target = ManyToManyThroughTarget.objects.create( +#             name='through-target-1') -    def test_many_to_many_create(self): -        data = {'id': 2, 'name': 'source-2', 'targets': [self.target.pk]} -        serializer = ManyToManyThroughSourceSerializer(data=data) -        self.assertTrue(serializer.fields['targets'].read_only) -        self.assertTrue(serializer.is_valid()) -        obj = serializer.save() -        self.assertEqual(obj.name, 'source-2') -        self.assertEqual(obj.targets.count(), 0) +#     def test_many_to_many_create(self): +#         data = {'id': 2, 'name': 'source-2', 'targets': [self.target.pk]} +#         serializer = ManyToManyThroughSourceSerializer(data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() +#         self.assertEqual(obj.name, 'source-2') +#         self.assertEqual(obj.targets.count(), 0) -    def test_many_to_many_reverse_create(self): -        data = {'id': 2, 'name': 'target-2', 'sources': [self.source.pk]} -        serializer = ManyToManyThroughTargetSerializer(data=data) -        self.assertTrue(serializer.fields['sources'].read_only) -        self.assertTrue(serializer.is_valid()) -        serializer.save() -        obj = serializer.save() -        self.assertEqual(obj.name, 'target-2') -        self.assertEqual(obj.sources.count(), 0) +#     def test_many_to_many_reverse_create(self): +#         data = {'id': 2, 'name': 'target-2', 'sources': [self.source.pk]} +#         serializer = ManyToManyThroughTargetSerializer(data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() +#         self.assertEqual(obj.name, 'target-2') +#         self.assertEqual(obj.sources.count(), 0) -# Regression tests for #694 (`source` attribute on related fields) +# # Regression tests for #694 (`source` attribute on related fields) -class PrimaryKeyRelatedFieldSourceTests(TestCase): -    def test_related_manager_source(self): -        """ -        Relational fields should be able to use manager-returning methods as their source. -        """ -        BlogPost.objects.create(title='blah') -        field = serializers.PrimaryKeyRelatedField(many=True, source='get_blogposts_manager') +# class PrimaryKeyRelatedFieldSourceTests(TestCase): +#     def test_related_manager_source(self): +#         """ +#         Relational fields should be able to use manager-returning methods as their source. +#         """ +#         BlogPost.objects.create(title='blah') +#         field = serializers.PrimaryKeyRelatedField(many=True, source='get_blogposts_manager') -        class ClassWithManagerMethod(object): -            def get_blogposts_manager(self): -                return BlogPost.objects +#         class ClassWithManagerMethod(object): +#             def get_blogposts_manager(self): +#                 return BlogPost.objects -        obj = ClassWithManagerMethod() -        value = field.field_to_native(obj, 'field_name') -        self.assertEqual(value, [1]) +#         obj = ClassWithManagerMethod() +#         value = field.field_to_native(obj, 'field_name') +#         self.assertEqual(value, [1]) -    def test_related_queryset_source(self): -        """ -        Relational fields should be able to use queryset-returning methods as their source. -        """ -        BlogPost.objects.create(title='blah') -        field = serializers.PrimaryKeyRelatedField(many=True, source='get_blogposts_queryset') +#     def test_related_queryset_source(self): +#         """ +#         Relational fields should be able to use queryset-returning methods as their source. +#         """ +#         BlogPost.objects.create(title='blah') +#         field = serializers.PrimaryKeyRelatedField(many=True, source='get_blogposts_queryset') -        class ClassWithQuerysetMethod(object): -            def get_blogposts_queryset(self): -                return BlogPost.objects.all() +#         class ClassWithQuerysetMethod(object): +#             def get_blogposts_queryset(self): +#                 return BlogPost.objects.all() -        obj = ClassWithQuerysetMethod() -        value = field.field_to_native(obj, 'field_name') -        self.assertEqual(value, [1]) +#         obj = ClassWithQuerysetMethod() +#         value = field.field_to_native(obj, 'field_name') +#         self.assertEqual(value, [1]) -    def test_dotted_source(self): -        """ -        Source argument should support dotted.source notation. -        """ -        BlogPost.objects.create(title='blah') -        field = serializers.PrimaryKeyRelatedField(many=True, source='a.b.c') - -        class ClassWithQuerysetMethod(object): -            a = { -                'b': { -                    'c': BlogPost.objects.all() -                } -            } - -        obj = ClassWithQuerysetMethod() -        value = field.field_to_native(obj, 'field_name') -        self.assertEqual(value, [1]) +#     def test_dotted_source(self): +#         """ +#         Source argument should support dotted.source notation. +#         """ +#         BlogPost.objects.create(title='blah') +#         field = serializers.PrimaryKeyRelatedField(many=True, source='a.b.c') + +#         class ClassWithQuerysetMethod(object): +#             a = { +#                 'b': { +#                     'c': BlogPost.objects.all() +#                 } +#             } + +#         obj = ClassWithQuerysetMethod() +#         value = field.field_to_native(obj, 'field_name') +#         self.assertEqual(value, [1]) | 
