Browse Source

added unique_together model including tests to verify that PATCH works

Miroslav Shubernetskiy 10 years ago
parent
commit
2fb3648505

+ 8 - 0
rest_framework_bulk/tests/simple_app/models.py

@@ -5,3 +5,11 @@ from django.db import models
 class SimpleModel(models.Model):
     number = models.IntegerField()
     contents = models.CharField(max_length=16)
+
+
+class UniqueTogetherModel(models.Model):
+    foo = models.IntegerField()
+    bar = models.IntegerField()
+
+    class Meta(object):
+        unique_together = ('foo', 'bar')

+ 9 - 1
rest_framework_bulk/tests/simple_app/serializers.py

@@ -2,7 +2,7 @@ from __future__ import print_function, unicode_literals
 from rest_framework.serializers import ModelSerializer
 from rest_framework_bulk.serializers import BulkListSerializer, BulkSerializerMixin
 
-from .models import SimpleModel
+from .models import SimpleModel, UniqueTogetherModel
 
 
 class SimpleSerializer(BulkSerializerMixin,  # only required in DRF3
@@ -11,3 +11,11 @@ class SimpleSerializer(BulkSerializerMixin,  # only required in DRF3
         model = SimpleModel
         # only required in DRF3
         list_serializer_class = BulkListSerializer
+
+
+class UniqueTogetherSerializer(BulkSerializerMixin,  # only required in DRF3
+                               ModelSerializer):
+    class Meta(object):
+        model = UniqueTogetherModel
+        # only required in DRF3
+        list_serializer_class = BulkListSerializer

+ 2 - 1
rest_framework_bulk/tests/simple_app/urls.py

@@ -2,11 +2,12 @@ from __future__ import print_function, unicode_literals
 from django.conf.urls import patterns, url, include
 from rest_framework_bulk.routes import BulkRouter
 
-from .views import SimpleViewSet
+from .views import SimpleViewSet, UniqueTogetherViewSet
 
 
 router = BulkRouter()
 router.register('simple', SimpleViewSet, 'simple')
+router.register('unique-together', UniqueTogetherViewSet, 'unique-together')
 
 urlpatterns = patterns(
     '',

+ 8 - 2
rest_framework_bulk/tests/simple_app/views.py

@@ -1,8 +1,8 @@
 from __future__ import unicode_literals, print_function
 from rest_framework_bulk import generics
 
-from .models import SimpleModel
-from .serializers import SimpleSerializer
+from .models import SimpleModel, UniqueTogetherModel
+from .serializers import SimpleSerializer, UniqueTogetherSerializer
 
 
 class SimpleMixin(object):
@@ -23,3 +23,9 @@ class FilteredBulkAPIView(SimpleMixin, generics.ListBulkCreateUpdateDestroyAPIVi
 class SimpleViewSet(SimpleMixin, generics.BulkModelViewSet):
     def filter_queryset(self, queryset):
         return queryset.filter(number__gt=5)
+
+
+class UniqueTogetherViewSet(generics.BulkModelViewSet):
+    model = UniqueTogetherModel
+    queryset = UniqueTogetherModel.objects.all()
+    serializer_class = UniqueTogetherSerializer

+ 20 - 1
rest_framework_bulk/tests/test_generics.py

@@ -5,7 +5,7 @@ from django.test import TestCase
 from django.test.client import RequestFactory
 from rest_framework import status
 
-from .simple_app.models import SimpleModel
+from .simple_app.models import SimpleModel, UniqueTogetherModel
 from .simple_app.views import FilteredBulkAPIView, SimpleBulkAPIView
 
 
@@ -256,6 +256,25 @@ class TestBulkAPIViewSet(TestCase):
 
         self.assertEqual(response.status_code, status.HTTP_200_OK)
 
+    def test_patch_unique_together(self):
+        """
+        Test that PATCH with multiple partial resources returns 200
+        even on model with unique together columns
+        """
+        obj1 = UniqueTogetherModel.objects.create(foo=1, bar=2)
+        obj2 = UniqueTogetherModel.objects.create(foo=3, bar=4)
+
+        response = self.client.patch(
+            reverse('api:unique-together-list'),
+            data=json.dumps([
+                {'foo': 5, 'id': obj1.pk},
+                {'foo': 6, 'id': obj2.pk},
+            ]),
+            content_type='application/json',
+        )
+
+        self.assertEqual(response.status_code, status.HTTP_200_OK)
+
     def test_delete(self):
         """
         Test that PATCH with multiple partial resources returns 200

+ 2 - 0
tests/__init__.py

@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from __future__ import print_function, unicode_literals