diff options
| author | Krzysztof Jurewicz | 2013-11-19 15:49:31 +0100 |
|---|---|---|
| committer | Krzysztof Jurewicz | 2013-11-19 15:49:31 +0100 |
| commit | 9cea6880f7103c4e9407f975753c830f109c8c7c (patch) | |
| tree | 1a45f020f5fa471842eff57131ae3ab3ef9b0fd0 /rest_framework/tests | |
| parent | ca2bd616d989f78d00641231e645198a6c95caa0 (diff) | |
| download | django-rest-framework-9cea6880f7103c4e9407f975753c830f109c8c7c.tar.bz2 | |
Added handling of validation errors in PUT-as-create.
Fixes #1035.
Diffstat (limited to 'rest_framework/tests')
| -rw-r--r-- | rest_framework/tests/test_generics.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/rest_framework/tests/test_generics.py b/rest_framework/tests/test_generics.py index 3fcef606..996bd5b0 100644 --- a/rest_framework/tests/test_generics.py +++ b/rest_framework/tests/test_generics.py @@ -23,6 +23,10 @@ class InstanceView(generics.RetrieveUpdateDestroyAPIView): """ model = BasicModel + def get_queryset(self): + queryset = super(InstanceView, self).get_queryset() + return queryset.exclude(text='filtered out') + class SlugSerializer(serializers.ModelSerializer): slug = serializers.Field() # read only @@ -160,10 +164,10 @@ class TestInstanceView(TestCase): """ Create 3 BasicModel intances. """ - items = ['foo', 'bar', 'baz'] + items = ['foo', 'bar', 'baz', 'filtered out'] for item in items: BasicModel(text=item).save() - self.objects = BasicModel.objects + self.objects = BasicModel.objects.exclude(text='filtered out') self.data = [ {'id': obj.id, 'text': obj.text} for obj in self.objects.all() @@ -352,6 +356,17 @@ class TestInstanceView(TestCase): updated = self.objects.get(id=1) self.assertEqual(updated.text, 'foobar') + def test_put_to_filtered_out_instance(self): + """ + PUT requests to an URL of instance which is filtered out should not be + able to create new objects. + """ + data = {'text': 'foo'} + filtered_out_pk = BasicModel.objects.filter(text='filtered out')[0].pk + request = factory.put('/{0}'.format(filtered_out_pk), data, format='json') + response = self.view(request, pk=filtered_out_pk).render() + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + def test_put_as_create_on_id_based_url(self): """ PUT requests to RetrieveUpdateDestroyAPIView should create an object |
