aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/tests/validation.py
diff options
context:
space:
mode:
authorTom Christie2013-02-22 22:13:06 +0000
committerTom Christie2013-02-22 22:13:06 +0000
commitbba918fb2a04ace16657f717e24cd220565837a6 (patch)
treeabef68795ef68f044e5c79a8fa95b3d5d5c85027 /rest_framework/tests/validation.py
parentbc87bf13b48e4ad6b3957ed686cad8a68c2072a4 (diff)
downloaddjango-rest-framework-bba918fb2a04ace16657f717e24cd220565837a6.tar.bz2
Fix and test case for #653
Closes #653
Diffstat (limited to 'rest_framework/tests/validation.py')
-rw-r--r--rest_framework/tests/validation.py65
1 files changed, 65 insertions, 0 deletions
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)