From 2fb3648505bb31f4bc55f57a3fd0bbd4846c1951 Mon Sep 17 00:00:00 2001 From: Miroslav Shubernetskiy Date: Wed, 18 Feb 2015 23:19:27 -0500 Subject: [PATCH] added unique_together model including tests to verify that PATCH works --- .../tests/simple_app/models.py | 8 +++++++ .../tests/simple_app/serializers.py | 10 ++++++++- rest_framework_bulk/tests/simple_app/urls.py | 3 ++- rest_framework_bulk/tests/simple_app/views.py | 10 +++++++-- rest_framework_bulk/tests/test_generics.py | 21 ++++++++++++++++++- tests/__init__.py | 2 ++ 6 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 tests/__init__.py diff --git a/rest_framework_bulk/tests/simple_app/models.py b/rest_framework_bulk/tests/simple_app/models.py index 8c3eafa..243b1c9 100644 --- a/rest_framework_bulk/tests/simple_app/models.py +++ b/rest_framework_bulk/tests/simple_app/models.py @@ -5,3 +5,11 @@ 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') diff --git a/rest_framework_bulk/tests/simple_app/serializers.py b/rest_framework_bulk/tests/simple_app/serializers.py index 423083c..c182407 100644 --- a/rest_framework_bulk/tests/simple_app/serializers.py +++ b/rest_framework_bulk/tests/simple_app/serializers.py @@ -2,7 +2,7 @@ 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 Meta(object): 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 diff --git a/rest_framework_bulk/tests/simple_app/urls.py b/rest_framework_bulk/tests/simple_app/urls.py index f1628d5..6ace076 100644 --- a/rest_framework_bulk/tests/simple_app/urls.py +++ b/rest_framework_bulk/tests/simple_app/urls.py @@ -2,11 +2,12 @@ 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( '', diff --git a/rest_framework_bulk/tests/simple_app/views.py b/rest_framework_bulk/tests/simple_app/views.py index 7bc16c8..b550f2a 100644 --- a/rest_framework_bulk/tests/simple_app/views.py +++ b/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 @@ def filter_queryset(self, queryset): 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 diff --git a/rest_framework_bulk/tests/test_generics.py b/rest_framework_bulk/tests/test_generics.py index 5522948..5daff4f 100644 --- a/rest_framework_bulk/tests/test_generics.py +++ b/rest_framework_bulk/tests/test_generics.py @@ -5,7 +5,7 @@ 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 @@ def test_patch(self): 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 diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..8f4a3fc --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from __future__ import print_function, unicode_literals