diff options
| author | Xavier Ordoquy | 2014-11-26 16:36:56 +0100 | 
|---|---|---|
| committer | Xavier Ordoquy | 2014-11-26 16:36:56 +0100 | 
| commit | f5e5ed0077cc477a7b8af98c7b10d8d3701f1a65 (patch) | |
| tree | 252729a9e61deb0dbc1a098feb1c55eae56ca948 /tests/test_validation.py | |
| parent | 311d315a739f4d1d02e87a09de0bbf9e7b0cee46 (diff) | |
| parent | 2647e1aaaadfc2cfd947c633399dca1060c17401 (diff) | |
| download | django-rest-framework-f5e5ed0077cc477a7b8af98c7b10d8d3701f1a65.tar.bz2 | |
Merge remote-tracking branch 'reference/master' into bugfix/1850
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 | 
