diff options
| author | Carlton Gibson | 2014-11-18 16:42:39 +0100 |
|---|---|---|
| committer | Carlton Gibson | 2014-11-18 16:42:39 +0100 |
| commit | c50a42bddc66e28d624cd3caadd2d63502ac2e6e (patch) | |
| tree | bf03e2dcb23c2e4f372ff00cba4a810a96c24681 /tests/test_validation.py | |
| parent | ba52c0c62762b9976fffa72dde7ce922176e481d (diff) | |
| parent | 080bd3d24e1866df2acc3aae0ec0f97ebe3a8c36 (diff) | |
| download | django-rest-framework-c50a42bddc66e28d624cd3caadd2d63502ac2e6e.tar.bz2 | |
Merge branch 'master' of github.com:tomchristie/django-rest-framework
Diffstat (limited to 'tests/test_validation.py')
| -rw-r--r-- | tests/test_validation.py | 76 |
1 files changed, 41 insertions, 35 deletions
diff --git a/tests/test_validation.py b/tests/test_validation.py index a46e38ac..3db82555 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -1,10 +1,10 @@ from __future__ import unicode_literals -from django.core.validators import MaxValueValidator -from django.core.exceptions import ValidationError +from django.core.validators import RegexValidator, MaxValueValidator from django.db import models from django.test import TestCase from rest_framework import generics, serializers, status from rest_framework.test import APIRequestFactory +import re factory = APIRequestFactory() @@ -23,23 +23,10 @@ class ValidationModelSerializer(serializers.ModelSerializer): class UpdateValidationModel(generics.RetrieveUpdateDestroyAPIView): - model = ValidationModel + queryset = ValidationModel.objects.all() 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('/', {}, format='json') - view = UpdateValidationModel().as_view() - response = view(request, pk=obj.pk).render() - self.assertEqual(response.status_code, status.HTTP_200_OK) - - # Regression for #653 class ShouldValidateModel(models.Model): @@ -49,11 +36,10 @@ class ShouldValidateModel(models.Model): class ShouldValidateModelSerializer(serializers.ModelSerializer): renamed = serializers.CharField(source='should_validate_field', required=False) - def validate_renamed(self, attrs, source): - value = attrs[source] + def validate_renamed(self, value): if len(value) < 3: raise serializers.ValidationError('Minimum 3 characters.') - return attrs + return value class Meta: model = ShouldValidateModel @@ -102,8 +88,11 @@ class TestAvoidValidation(TestCase): def test_serializer_errors_has_only_invalid_data_error(self): serializer = ValidationSerializer(data='invalid data') self.assertFalse(serializer.is_valid()) - self.assertDictEqual(serializer.errors, - {'non_field_errors': ['Invalid data']}) + self.assertDictEqual(serializer.errors, { + 'non_field_errors': [ + 'Invalid data. Expected a dictionary, but got %s.' % type('').__name__ + ] + }) # regression tests for issue: 1493 @@ -118,7 +107,7 @@ class ValidationMaxValueValidatorModelSerializer(serializers.ModelSerializer): class UpdateMaxValueValidationModel(generics.RetrieveUpdateDestroyAPIView): - model = ValidationMaxValueValidatorModel + queryset = ValidationMaxValueValidatorModel.objects.all() serializer_class = ValidationMaxValueValidatorModelSerializer @@ -145,7 +134,7 @@ class TestMaxValueValidatorValidation(TestCase): request = factory.patch('/{0}'.format(obj.pk), {'number_value': 101}, format='json') view = UpdateMaxValueValidationModel().as_view() response = view(request, pk=obj.pk).render() - self.assertEqual(response.content, b'{"number_value": ["Ensure this value is less than or equal to 100."]}') + self.assertEqual(response.content, b'{"number_value":["Ensure this value is less than or equal to 100."]}') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) @@ -172,17 +161,34 @@ class TestChoiceFieldChoicesValidate(TestCase): f = serializers.ChoiceField(choices=self.CHOICES) value = self.CHOICES[0][0] try: - f.validate(value) - except ValidationError: + f.to_internal_value(value) + except serializers.ValidationError: self.fail("Value %s does not validate" % str(value)) - def test_nested_choices(self): - """ - Make sure a nested value for choices works as expected. - """ - f = serializers.ChoiceField(choices=self.CHOICES_NESTED) - value = self.CHOICES_NESTED[0][1][0][0] - try: - f.validate(value) - except ValidationError: - self.fail("Value %s does not validate" % str(value)) + # def test_nested_choices(self): + # """ + # Make sure a nested value for choices works as expected. + # """ + # f = serializers.ChoiceField(choices=self.CHOICES_NESTED) + # value = self.CHOICES_NESTED[0][1][0][0] + # try: + # f.to_native(value) + # except ValidationError: + # self.fail("Value %s does not validate" % str(value)) + + +class RegexSerializer(serializers.Serializer): + pin = serializers.CharField( + validators=[RegexValidator(regex=re.compile('^[0-9]{4,6}$'), + message='A PIN is 4-6 digits')]) + +expected_repr = """ +RegexSerializer(): + pin = CharField(validators=[<django.core.validators.RegexValidator object>]) +""".strip() + + +class TestRegexSerializer(TestCase): + def test_regex_repr(self): + serializer_repr = repr(RegexSerializer()) + assert serializer_repr == expected_repr |
