From bba918fb2a04ace16657f717e24cd220565837a6 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 22 Feb 2013 22:13:06 +0000 Subject: Fix and test case for #653 Closes #653 --- rest_framework/tests/validation.py | 65 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 rest_framework/tests/validation.py (limited to 'rest_framework/tests/validation.py') diff --git a/rest_framework/tests/validation.py b/rest_framework/tests/validation.py new file mode 100644 index 00000000..4d46cbdc --- /dev/null +++ b/rest_framework/tests/validation.py @@ -0,0 +1,65 @@ +from __future__ import unicode_literals +from django.db import models +from django.test import TestCase +from rest_framework import generics, serializers, status +from rest_framework.tests.utils import RequestFactory +import json + +factory = RequestFactory() + + +# Regression for #666 + +class ValidationModel(models.Model): + blank_validated_field = models.CharField(max_length=255) + + +class ValidationModelSerializer(serializers.ModelSerializer): + class Meta: + model = ValidationModel + fields = ('blank_validated_field',) + read_only_fields = ('blank_validated_field',) + + +class UpdateValidationModel(generics.RetrieveUpdateDestroyAPIView): + model = ValidationModel + serializer_class = ValidationModelSerializer + + +class TestPreSaveValidationExclusions(TestCase): + def test_pre_save_validation_exclusions(self): + """ + Somewhat weird test case to ensure that we don't perform model + validation on read only fields. + """ + obj = ValidationModel.objects.create(blank_validated_field='') + request = factory.put('/', json.dumps({}), + content_type='application/json') + view = UpdateValidationModel().as_view() + response = view(request, pk=obj.pk).render() + self.assertEquals(response.status_code, status.HTTP_200_OK) + + +# Regression for #653 + +class ShouldValidateModel(models.Model): + should_validate_field = models.CharField(max_length=255) + + +class ShouldValidateModelSerializer(serializers.ModelSerializer): + renamed = serializers.CharField(source='should_validate_field', required=False) + + class Meta: + model = ShouldValidateModel + fields = ('renamed',) + + +class TestPreSaveValidationExclusions(TestCase): + def test_renamed_fields_are_model_validated(self): + """ + Ensure fields with 'source' applied do get still get model validation. + """ + # We've set `required=False` on the serializer, but the model + # does not have `blank=True`, so this serializer should not validate. + serializer = ShouldValidateModelSerializer(data={'renamed': ''}) + self.assertEquals(serializer.is_valid(), False) -- cgit v1.2.3 From a1dbd93f5467a8a25e18516f57f34c15b3b31b36 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 27 Feb 2013 21:15:00 +0000 Subject: `assertEquals` -> `assertEqual` --- rest_framework/tests/validation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'rest_framework/tests/validation.py') diff --git a/rest_framework/tests/validation.py b/rest_framework/tests/validation.py index 4d46cbdc..cbdd6515 100644 --- a/rest_framework/tests/validation.py +++ b/rest_framework/tests/validation.py @@ -37,7 +37,7 @@ class TestPreSaveValidationExclusions(TestCase): content_type='application/json') view = UpdateValidationModel().as_view() response = view(request, pk=obj.pk).render() - self.assertEquals(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.status_code, status.HTTP_200_OK) # Regression for #653 @@ -62,4 +62,4 @@ class TestPreSaveValidationExclusions(TestCase): # We've set `required=False` on the serializer, but the model # does not have `blank=True`, so this serializer should not validate. serializer = ShouldValidateModelSerializer(data={'renamed': ''}) - self.assertEquals(serializer.is_valid(), False) + self.assertEqual(serializer.is_valid(), False) -- cgit v1.2.3