diff options
| author | Tom Christie | 2014-09-02 17:41:23 +0100 | 
|---|---|---|
| committer | Tom Christie | 2014-09-02 17:41:23 +0100 | 
| commit | f2852811f93863f2eed04d51eeb7ef27716b2409 (patch) | |
| tree | 45799932849f81d45d77edc53cb00269465ba0f1 /tests/test_relations_nested.py | |
| parent | ec096a1caceff6a4f5c75a152dd1c7bea9ed281d (diff) | |
| download | django-rest-framework-f2852811f93863f2eed04d51eeb7ef27716b2409.tar.bz2 | |
Getting tests passing
Diffstat (limited to 'tests/test_relations_nested.py')
| -rw-r--r-- | tests/test_relations_nested.py | 652 | 
1 files changed, 326 insertions, 326 deletions
| diff --git a/tests/test_relations_nested.py b/tests/test_relations_nested.py index 4d9da489..4a99fee9 100644 --- a/tests/test_relations_nested.py +++ b/tests/test_relations_nested.py @@ -1,326 +1,326 @@ -from __future__ import unicode_literals -from django.db import models -from django.test import TestCase -from rest_framework import serializers - -from .models import OneToOneTarget - - -class OneToOneSource(models.Model): -    name = models.CharField(max_length=100) -    target = models.OneToOneField(OneToOneTarget, related_name='source', -                                  null=True, blank=True) - - -class OneToManyTarget(models.Model): -    name = models.CharField(max_length=100) - - -class OneToManySource(models.Model): -    name = models.CharField(max_length=100) -    target = models.ForeignKey(OneToManyTarget, related_name='sources') - - -class ReverseNestedOneToOneTests(TestCase): -    def setUp(self): -        class OneToOneSourceSerializer(serializers.ModelSerializer): -            class Meta: -                model = OneToOneSource -                fields = ('id', 'name') - -        class OneToOneTargetSerializer(serializers.ModelSerializer): -            source = OneToOneSourceSerializer() - -            class Meta: -                model = OneToOneTarget -                fields = ('id', 'name', 'source') - -        self.Serializer = OneToOneTargetSerializer - -        for idx in range(1, 4): -            target = OneToOneTarget(name='target-%d' % idx) -            target.save() -            source = OneToOneSource(name='source-%d' % idx, target=target) -            source.save() - -    def test_one_to_one_retrieve(self): -        queryset = OneToOneTarget.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'target-1', 'source': {'id': 1, 'name': 'source-1'}}, -            {'id': 2, 'name': 'target-2', 'source': {'id': 2, 'name': 'source-2'}}, -            {'id': 3, 'name': 'target-3', 'source': {'id': 3, 'name': 'source-3'}} -        ] -        self.assertEqual(serializer.data, expected) - -    def test_one_to_one_create(self): -        data = {'id': 4, 'name': 'target-4', 'source': {'id': 4, 'name': 'source-4'}} -        serializer = self.Serializer(data=data) -        self.assertTrue(serializer.is_valid()) -        obj = serializer.save() -        self.assertEqual(serializer.data, data) -        self.assertEqual(obj.name, 'target-4') - -        # Ensure (target 4, target_source 4, source 4) are added, and -        # everything else is as expected. -        queryset = OneToOneTarget.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'target-1', 'source': {'id': 1, 'name': 'source-1'}}, -            {'id': 2, 'name': 'target-2', 'source': {'id': 2, 'name': 'source-2'}}, -            {'id': 3, 'name': 'target-3', 'source': {'id': 3, 'name': 'source-3'}}, -            {'id': 4, 'name': 'target-4', 'source': {'id': 4, 'name': 'source-4'}} -        ] -        self.assertEqual(serializer.data, expected) - -    def test_one_to_one_create_with_invalid_data(self): -        data = {'id': 4, 'name': 'target-4', 'source': {'id': 4}} -        serializer = self.Serializer(data=data) -        self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'source': [{'name': ['This field is required.']}]}) - -    def test_one_to_one_update(self): -        data = {'id': 3, 'name': 'target-3-updated', 'source': {'id': 3, 'name': 'source-3-updated'}} -        instance = OneToOneTarget.objects.get(pk=3) -        serializer = self.Serializer(instance, data=data) -        self.assertTrue(serializer.is_valid()) -        obj = serializer.save() -        self.assertEqual(serializer.data, data) -        self.assertEqual(obj.name, 'target-3-updated') - -        # Ensure (target 3, target_source 3, source 3) are updated, -        # and everything else is as expected. -        queryset = OneToOneTarget.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'target-1', 'source': {'id': 1, 'name': 'source-1'}}, -            {'id': 2, 'name': 'target-2', 'source': {'id': 2, 'name': 'source-2'}}, -            {'id': 3, 'name': 'target-3-updated', 'source': {'id': 3, 'name': 'source-3-updated'}} -        ] -        self.assertEqual(serializer.data, expected) - - -class ForwardNestedOneToOneTests(TestCase): -    def setUp(self): -        class OneToOneTargetSerializer(serializers.ModelSerializer): -            class Meta: -                model = OneToOneTarget -                fields = ('id', 'name') - -        class OneToOneSourceSerializer(serializers.ModelSerializer): -            target = OneToOneTargetSerializer() - -            class Meta: -                model = OneToOneSource -                fields = ('id', 'name', 'target') - -        self.Serializer = OneToOneSourceSerializer - -        for idx in range(1, 4): -            target = OneToOneTarget(name='target-%d' % idx) -            target.save() -            source = OneToOneSource(name='source-%d' % idx, target=target) -            source.save() - -    def test_one_to_one_retrieve(self): -        queryset = OneToOneSource.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'source-1', 'target': {'id': 1, 'name': 'target-1'}}, -            {'id': 2, 'name': 'source-2', 'target': {'id': 2, 'name': 'target-2'}}, -            {'id': 3, 'name': 'source-3', 'target': {'id': 3, 'name': 'target-3'}} -        ] -        self.assertEqual(serializer.data, expected) - -    def test_one_to_one_create(self): -        data = {'id': 4, 'name': 'source-4', 'target': {'id': 4, 'name': 'target-4'}} -        serializer = self.Serializer(data=data) -        self.assertTrue(serializer.is_valid()) -        obj = serializer.save() -        self.assertEqual(serializer.data, data) -        self.assertEqual(obj.name, 'source-4') - -        # Ensure (target 4, target_source 4, source 4) are added, and -        # everything else is as expected. -        queryset = OneToOneSource.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'source-1', 'target': {'id': 1, 'name': 'target-1'}}, -            {'id': 2, 'name': 'source-2', 'target': {'id': 2, 'name': 'target-2'}}, -            {'id': 3, 'name': 'source-3', 'target': {'id': 3, 'name': 'target-3'}}, -            {'id': 4, 'name': 'source-4', 'target': {'id': 4, 'name': 'target-4'}} -        ] -        self.assertEqual(serializer.data, expected) - -    def test_one_to_one_create_with_invalid_data(self): -        data = {'id': 4, 'name': 'source-4', 'target': {'id': 4}} -        serializer = self.Serializer(data=data) -        self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'target': [{'name': ['This field is required.']}]}) - -    def test_one_to_one_update(self): -        data = {'id': 3, 'name': 'source-3-updated', 'target': {'id': 3, 'name': 'target-3-updated'}} -        instance = OneToOneSource.objects.get(pk=3) -        serializer = self.Serializer(instance, data=data) -        self.assertTrue(serializer.is_valid()) -        obj = serializer.save() -        self.assertEqual(serializer.data, data) -        self.assertEqual(obj.name, 'source-3-updated') - -        # Ensure (target 3, target_source 3, source 3) are updated, -        # and everything else is as expected. -        queryset = OneToOneSource.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'source-1', 'target': {'id': 1, 'name': 'target-1'}}, -            {'id': 2, 'name': 'source-2', 'target': {'id': 2, 'name': 'target-2'}}, -            {'id': 3, 'name': 'source-3-updated', 'target': {'id': 3, 'name': 'target-3-updated'}} -        ] -        self.assertEqual(serializer.data, expected) - -    def test_one_to_one_update_to_null(self): -        data = {'id': 3, 'name': 'source-3-updated', 'target': None} -        instance = OneToOneSource.objects.get(pk=3) -        serializer = self.Serializer(instance, data=data) -        self.assertTrue(serializer.is_valid()) -        obj = serializer.save() - -        self.assertEqual(serializer.data, data) -        self.assertEqual(obj.name, 'source-3-updated') -        self.assertEqual(obj.target, None) - -        queryset = OneToOneSource.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'source-1', 'target': {'id': 1, 'name': 'target-1'}}, -            {'id': 2, 'name': 'source-2', 'target': {'id': 2, 'name': 'target-2'}}, -            {'id': 3, 'name': 'source-3-updated', 'target': None} -        ] -        self.assertEqual(serializer.data, expected) - -    # TODO: Nullable 1-1 tests -    # def test_one_to_one_delete(self): -    #     data = {'id': 3, 'name': 'target-3', 'target_source': None} -    #     instance = OneToOneTarget.objects.get(pk=3) -    #     serializer = self.Serializer(instance, data=data) -    #     self.assertTrue(serializer.is_valid()) -    #     serializer.save() - -    #     # Ensure (target_source 3, source 3) are deleted, -    #     # and everything else is as expected. -    #     queryset = OneToOneTarget.objects.all() -    #     serializer = self.Serializer(queryset) -    #     expected = [ -    #         {'id': 1, 'name': 'target-1', 'source': {'id': 1, 'name': 'source-1'}}, -    #         {'id': 2, 'name': 'target-2', 'source': {'id': 2, 'name': 'source-2'}}, -    #         {'id': 3, 'name': 'target-3', 'source': None} -    #     ] -    #     self.assertEqual(serializer.data, expected) - - -class ReverseNestedOneToManyTests(TestCase): -    def setUp(self): -        class OneToManySourceSerializer(serializers.ModelSerializer): -            class Meta: -                model = OneToManySource -                fields = ('id', 'name') - -        class OneToManyTargetSerializer(serializers.ModelSerializer): -            sources = OneToManySourceSerializer(many=True, allow_add_remove=True) - -            class Meta: -                model = OneToManyTarget -                fields = ('id', 'name', 'sources') - -        self.Serializer = OneToManyTargetSerializer - -        target = OneToManyTarget(name='target-1') -        target.save() -        for idx in range(1, 4): -            source = OneToManySource(name='source-%d' % idx, target=target) -            source.save() - -    def test_one_to_many_retrieve(self): -        queryset = OneToManyTarget.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, -                                                      {'id': 2, 'name': 'source-2'}, -                                                      {'id': 3, 'name': 'source-3'}]}, -        ] -        self.assertEqual(serializer.data, expected) - -    def test_one_to_many_create(self): -        data = {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, -                                                         {'id': 2, 'name': 'source-2'}, -                                                         {'id': 3, 'name': 'source-3'}, -                                                         {'id': 4, 'name': 'source-4'}]} -        instance = OneToManyTarget.objects.get(pk=1) -        serializer = self.Serializer(instance, data=data) -        self.assertTrue(serializer.is_valid()) -        obj = serializer.save() -        self.assertEqual(serializer.data, data) -        self.assertEqual(obj.name, 'target-1') - -        # Ensure source 4 is added, and everything else is as -        # expected. -        queryset = OneToManyTarget.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, -                                                      {'id': 2, 'name': 'source-2'}, -                                                      {'id': 3, 'name': 'source-3'}, -                                                      {'id': 4, 'name': 'source-4'}]} -        ] -        self.assertEqual(serializer.data, expected) - -    def test_one_to_many_create_with_invalid_data(self): -        data = {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, -                                                         {'id': 2, 'name': 'source-2'}, -                                                         {'id': 3, 'name': 'source-3'}, -                                                         {'id': 4}]} -        serializer = self.Serializer(data=data) -        self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'sources': [{}, {}, {}, {'name': ['This field is required.']}]}) - -    def test_one_to_many_update(self): -        data = {'id': 1, 'name': 'target-1-updated', 'sources': [{'id': 1, 'name': 'source-1-updated'}, -                                                                 {'id': 2, 'name': 'source-2'}, -                                                                 {'id': 3, 'name': 'source-3'}]} -        instance = OneToManyTarget.objects.get(pk=1) -        serializer = self.Serializer(instance, data=data) -        self.assertTrue(serializer.is_valid()) -        obj = serializer.save() -        self.assertEqual(serializer.data, data) -        self.assertEqual(obj.name, 'target-1-updated') - -        # Ensure (target 1, source 1) are updated, -        # and everything else is as expected. -        queryset = OneToManyTarget.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'target-1-updated', 'sources': [{'id': 1, 'name': 'source-1-updated'}, -                                                              {'id': 2, 'name': 'source-2'}, -                                                              {'id': 3, 'name': 'source-3'}]} - -        ] -        self.assertEqual(serializer.data, expected) - -    def test_one_to_many_delete(self): -        data = {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, -                                                         {'id': 3, 'name': 'source-3'}]} -        instance = OneToManyTarget.objects.get(pk=1) -        serializer = self.Serializer(instance, data=data) -        self.assertTrue(serializer.is_valid()) -        serializer.save() - -        # Ensure source 2 is deleted, and everything else is as -        # expected. -        queryset = OneToManyTarget.objects.all() -        serializer = self.Serializer(queryset, many=True) -        expected = [ -            {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, -                                                      {'id': 3, 'name': 'source-3'}]} - -        ] -        self.assertEqual(serializer.data, expected) +# from __future__ import unicode_literals +# from django.db import models +# from django.test import TestCase +# from rest_framework import serializers + +# from .models import OneToOneTarget + + +# class OneToOneSource(models.Model): +#     name = models.CharField(max_length=100) +#     target = models.OneToOneField(OneToOneTarget, related_name='source', +#                                   null=True, blank=True) + + +# class OneToManyTarget(models.Model): +#     name = models.CharField(max_length=100) + + +# class OneToManySource(models.Model): +#     name = models.CharField(max_length=100) +#     target = models.ForeignKey(OneToManyTarget, related_name='sources') + + +# class ReverseNestedOneToOneTests(TestCase): +#     def setUp(self): +#         class OneToOneSourceSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = OneToOneSource +#                 fields = ('id', 'name') + +#         class OneToOneTargetSerializer(serializers.ModelSerializer): +#             source = OneToOneSourceSerializer() + +#             class Meta: +#                 model = OneToOneTarget +#                 fields = ('id', 'name', 'source') + +#         self.Serializer = OneToOneTargetSerializer + +#         for idx in range(1, 4): +#             target = OneToOneTarget(name='target-%d' % idx) +#             target.save() +#             source = OneToOneSource(name='source-%d' % idx, target=target) +#             source.save() + +#     def test_one_to_one_retrieve(self): +#         queryset = OneToOneTarget.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'target-1', 'source': {'id': 1, 'name': 'source-1'}}, +#             {'id': 2, 'name': 'target-2', 'source': {'id': 2, 'name': 'source-2'}}, +#             {'id': 3, 'name': 'target-3', 'source': {'id': 3, 'name': 'source-3'}} +#         ] +#         self.assertEqual(serializer.data, expected) + +#     def test_one_to_one_create(self): +#         data = {'id': 4, 'name': 'target-4', 'source': {'id': 4, 'name': 'source-4'}} +#         serializer = self.Serializer(data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() +#         self.assertEqual(serializer.data, data) +#         self.assertEqual(obj.name, 'target-4') + +#         # Ensure (target 4, target_source 4, source 4) are added, and +#         # everything else is as expected. +#         queryset = OneToOneTarget.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'target-1', 'source': {'id': 1, 'name': 'source-1'}}, +#             {'id': 2, 'name': 'target-2', 'source': {'id': 2, 'name': 'source-2'}}, +#             {'id': 3, 'name': 'target-3', 'source': {'id': 3, 'name': 'source-3'}}, +#             {'id': 4, 'name': 'target-4', 'source': {'id': 4, 'name': 'source-4'}} +#         ] +#         self.assertEqual(serializer.data, expected) + +#     def test_one_to_one_create_with_invalid_data(self): +#         data = {'id': 4, 'name': 'target-4', 'source': {'id': 4}} +#         serializer = self.Serializer(data=data) +#         self.assertFalse(serializer.is_valid()) +#         self.assertEqual(serializer.errors, {'source': [{'name': ['This field is required.']}]}) + +#     def test_one_to_one_update(self): +#         data = {'id': 3, 'name': 'target-3-updated', 'source': {'id': 3, 'name': 'source-3-updated'}} +#         instance = OneToOneTarget.objects.get(pk=3) +#         serializer = self.Serializer(instance, data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() +#         self.assertEqual(serializer.data, data) +#         self.assertEqual(obj.name, 'target-3-updated') + +#         # Ensure (target 3, target_source 3, source 3) are updated, +#         # and everything else is as expected. +#         queryset = OneToOneTarget.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'target-1', 'source': {'id': 1, 'name': 'source-1'}}, +#             {'id': 2, 'name': 'target-2', 'source': {'id': 2, 'name': 'source-2'}}, +#             {'id': 3, 'name': 'target-3-updated', 'source': {'id': 3, 'name': 'source-3-updated'}} +#         ] +#         self.assertEqual(serializer.data, expected) + + +# class ForwardNestedOneToOneTests(TestCase): +#     def setUp(self): +#         class OneToOneTargetSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = OneToOneTarget +#                 fields = ('id', 'name') + +#         class OneToOneSourceSerializer(serializers.ModelSerializer): +#             target = OneToOneTargetSerializer() + +#             class Meta: +#                 model = OneToOneSource +#                 fields = ('id', 'name', 'target') + +#         self.Serializer = OneToOneSourceSerializer + +#         for idx in range(1, 4): +#             target = OneToOneTarget(name='target-%d' % idx) +#             target.save() +#             source = OneToOneSource(name='source-%d' % idx, target=target) +#             source.save() + +#     def test_one_to_one_retrieve(self): +#         queryset = OneToOneSource.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'source-1', 'target': {'id': 1, 'name': 'target-1'}}, +#             {'id': 2, 'name': 'source-2', 'target': {'id': 2, 'name': 'target-2'}}, +#             {'id': 3, 'name': 'source-3', 'target': {'id': 3, 'name': 'target-3'}} +#         ] +#         self.assertEqual(serializer.data, expected) + +#     def test_one_to_one_create(self): +#         data = {'id': 4, 'name': 'source-4', 'target': {'id': 4, 'name': 'target-4'}} +#         serializer = self.Serializer(data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() +#         self.assertEqual(serializer.data, data) +#         self.assertEqual(obj.name, 'source-4') + +#         # Ensure (target 4, target_source 4, source 4) are added, and +#         # everything else is as expected. +#         queryset = OneToOneSource.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'source-1', 'target': {'id': 1, 'name': 'target-1'}}, +#             {'id': 2, 'name': 'source-2', 'target': {'id': 2, 'name': 'target-2'}}, +#             {'id': 3, 'name': 'source-3', 'target': {'id': 3, 'name': 'target-3'}}, +#             {'id': 4, 'name': 'source-4', 'target': {'id': 4, 'name': 'target-4'}} +#         ] +#         self.assertEqual(serializer.data, expected) + +#     def test_one_to_one_create_with_invalid_data(self): +#         data = {'id': 4, 'name': 'source-4', 'target': {'id': 4}} +#         serializer = self.Serializer(data=data) +#         self.assertFalse(serializer.is_valid()) +#         self.assertEqual(serializer.errors, {'target': [{'name': ['This field is required.']}]}) + +#     def test_one_to_one_update(self): +#         data = {'id': 3, 'name': 'source-3-updated', 'target': {'id': 3, 'name': 'target-3-updated'}} +#         instance = OneToOneSource.objects.get(pk=3) +#         serializer = self.Serializer(instance, data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() +#         self.assertEqual(serializer.data, data) +#         self.assertEqual(obj.name, 'source-3-updated') + +#         # Ensure (target 3, target_source 3, source 3) are updated, +#         # and everything else is as expected. +#         queryset = OneToOneSource.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'source-1', 'target': {'id': 1, 'name': 'target-1'}}, +#             {'id': 2, 'name': 'source-2', 'target': {'id': 2, 'name': 'target-2'}}, +#             {'id': 3, 'name': 'source-3-updated', 'target': {'id': 3, 'name': 'target-3-updated'}} +#         ] +#         self.assertEqual(serializer.data, expected) + +#     def test_one_to_one_update_to_null(self): +#         data = {'id': 3, 'name': 'source-3-updated', 'target': None} +#         instance = OneToOneSource.objects.get(pk=3) +#         serializer = self.Serializer(instance, data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() + +#         self.assertEqual(serializer.data, data) +#         self.assertEqual(obj.name, 'source-3-updated') +#         self.assertEqual(obj.target, None) + +#         queryset = OneToOneSource.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'source-1', 'target': {'id': 1, 'name': 'target-1'}}, +#             {'id': 2, 'name': 'source-2', 'target': {'id': 2, 'name': 'target-2'}}, +#             {'id': 3, 'name': 'source-3-updated', 'target': None} +#         ] +#         self.assertEqual(serializer.data, expected) + +#     # TODO: Nullable 1-1 tests +#     # def test_one_to_one_delete(self): +#     #     data = {'id': 3, 'name': 'target-3', 'target_source': None} +#     #     instance = OneToOneTarget.objects.get(pk=3) +#     #     serializer = self.Serializer(instance, data=data) +#     #     self.assertTrue(serializer.is_valid()) +#     #     serializer.save() + +#     #     # Ensure (target_source 3, source 3) are deleted, +#     #     # and everything else is as expected. +#     #     queryset = OneToOneTarget.objects.all() +#     #     serializer = self.Serializer(queryset) +#     #     expected = [ +#     #         {'id': 1, 'name': 'target-1', 'source': {'id': 1, 'name': 'source-1'}}, +#     #         {'id': 2, 'name': 'target-2', 'source': {'id': 2, 'name': 'source-2'}}, +#     #         {'id': 3, 'name': 'target-3', 'source': None} +#     #     ] +#     #     self.assertEqual(serializer.data, expected) + + +# class ReverseNestedOneToManyTests(TestCase): +#     def setUp(self): +#         class OneToManySourceSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = OneToManySource +#                 fields = ('id', 'name') + +#         class OneToManyTargetSerializer(serializers.ModelSerializer): +#             sources = OneToManySourceSerializer(many=True, allow_add_remove=True) + +#             class Meta: +#                 model = OneToManyTarget +#                 fields = ('id', 'name', 'sources') + +#         self.Serializer = OneToManyTargetSerializer + +#         target = OneToManyTarget(name='target-1') +#         target.save() +#         for idx in range(1, 4): +#             source = OneToManySource(name='source-%d' % idx, target=target) +#             source.save() + +#     def test_one_to_many_retrieve(self): +#         queryset = OneToManyTarget.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, +#                                                       {'id': 2, 'name': 'source-2'}, +#                                                       {'id': 3, 'name': 'source-3'}]}, +#         ] +#         self.assertEqual(serializer.data, expected) + +#     def test_one_to_many_create(self): +#         data = {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, +#                                                          {'id': 2, 'name': 'source-2'}, +#                                                          {'id': 3, 'name': 'source-3'}, +#                                                          {'id': 4, 'name': 'source-4'}]} +#         instance = OneToManyTarget.objects.get(pk=1) +#         serializer = self.Serializer(instance, data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() +#         self.assertEqual(serializer.data, data) +#         self.assertEqual(obj.name, 'target-1') + +#         # Ensure source 4 is added, and everything else is as +#         # expected. +#         queryset = OneToManyTarget.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, +#                                                       {'id': 2, 'name': 'source-2'}, +#                                                       {'id': 3, 'name': 'source-3'}, +#                                                       {'id': 4, 'name': 'source-4'}]} +#         ] +#         self.assertEqual(serializer.data, expected) + +#     def test_one_to_many_create_with_invalid_data(self): +#         data = {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, +#                                                          {'id': 2, 'name': 'source-2'}, +#                                                          {'id': 3, 'name': 'source-3'}, +#                                                          {'id': 4}]} +#         serializer = self.Serializer(data=data) +#         self.assertFalse(serializer.is_valid()) +#         self.assertEqual(serializer.errors, {'sources': [{}, {}, {}, {'name': ['This field is required.']}]}) + +#     def test_one_to_many_update(self): +#         data = {'id': 1, 'name': 'target-1-updated', 'sources': [{'id': 1, 'name': 'source-1-updated'}, +#                                                                  {'id': 2, 'name': 'source-2'}, +#                                                                  {'id': 3, 'name': 'source-3'}]} +#         instance = OneToManyTarget.objects.get(pk=1) +#         serializer = self.Serializer(instance, data=data) +#         self.assertTrue(serializer.is_valid()) +#         obj = serializer.save() +#         self.assertEqual(serializer.data, data) +#         self.assertEqual(obj.name, 'target-1-updated') + +#         # Ensure (target 1, source 1) are updated, +#         # and everything else is as expected. +#         queryset = OneToManyTarget.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'target-1-updated', 'sources': [{'id': 1, 'name': 'source-1-updated'}, +#                                                               {'id': 2, 'name': 'source-2'}, +#                                                               {'id': 3, 'name': 'source-3'}]} + +#         ] +#         self.assertEqual(serializer.data, expected) + +#     def test_one_to_many_delete(self): +#         data = {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, +#                                                          {'id': 3, 'name': 'source-3'}]} +#         instance = OneToManyTarget.objects.get(pk=1) +#         serializer = self.Serializer(instance, data=data) +#         self.assertTrue(serializer.is_valid()) +#         serializer.save() + +#         # Ensure source 2 is deleted, and everything else is as +#         # expected. +#         queryset = OneToManyTarget.objects.all() +#         serializer = self.Serializer(queryset, many=True) +#         expected = [ +#             {'id': 1, 'name': 'target-1', 'sources': [{'id': 1, 'name': 'source-1'}, +#                                                       {'id': 3, 'name': 'source-3'}]} + +#         ] +#         self.assertEqual(serializer.data, expected) | 
