From 0e3822d6e0ea71d43ce7108b43184a6b3eba3f3a Mon Sep 17 00:00:00 2001 From: Lukasz Balcerzak Date: Fri, 20 Dec 2013 16:53:06 +0100 Subject: Updated test class name to be unique --- rest_framework/tests/test_validation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'rest_framework/tests/test_validation.py') diff --git a/rest_framework/tests/test_validation.py b/rest_framework/tests/test_validation.py index ebfdff9c..ce7022cd 100644 --- a/rest_framework/tests/test_validation.py +++ b/rest_framework/tests/test_validation.py @@ -52,7 +52,7 @@ class ShouldValidateModelSerializer(serializers.ModelSerializer): fields = ('renamed',) -class TestPreSaveValidationExclusions(TestCase): +class TestPreSaveValidationExclusionsSerializer(TestCase): def test_renamed_fields_are_model_validated(self): """ Ensure fields with 'source' applied do get still get model validation. -- cgit v1.2.3 From 71aa5f3c455db9bea5163dca70bfe6f3b3c924be Mon Sep 17 00:00:00 2001 From: Lukasz Balcerzak Date: Fri, 20 Dec 2013 17:16:24 +0100 Subject: Added missing custom validation method test --- rest_framework/tests/test_validation.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'rest_framework/tests/test_validation.py') diff --git a/rest_framework/tests/test_validation.py b/rest_framework/tests/test_validation.py index ebfdff9c..371697f8 100644 --- a/rest_framework/tests/test_validation.py +++ b/rest_framework/tests/test_validation.py @@ -47,6 +47,12 @@ 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] + if len(value) < 3: + raise serializers.ValidationError('Minimum 3 characters.') + return attrs + class Meta: model = ShouldValidateModel fields = ('renamed',) @@ -63,6 +69,13 @@ class TestPreSaveValidationExclusions(TestCase): self.assertEqual(serializer.is_valid(), False) +class TestCustomValidationMethods(TestCase): + def test_custom_validation_method_is_executed(self): + serializer = ShouldValidateModelSerializer(data={'renamed': 'fo'}) + self.assertFalse(serializer.is_valid()) + self.assertIn('renamed', serializer.errors) + + class ValidationSerializer(serializers.Serializer): foo = serializers.CharField() -- cgit v1.2.3 From 973f898a4b8042775a94d3e76188b43f13d493a8 Mon Sep 17 00:00:00 2001 From: Lukasz Balcerzak Date: Fri, 20 Dec 2013 17:45:56 +0100 Subject: Should it be that way? --- rest_framework/tests/test_validation.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'rest_framework/tests/test_validation.py') diff --git a/rest_framework/tests/test_validation.py b/rest_framework/tests/test_validation.py index ce7022cd..ab75da25 100644 --- a/rest_framework/tests/test_validation.py +++ b/rest_framework/tests/test_validation.py @@ -61,6 +61,8 @@ class TestPreSaveValidationExclusionsSerializer(TestCase): # does not have `blank=True`, so this serializer should not validate. serializer = ShouldValidateModelSerializer(data={'renamed': ''}) self.assertEqual(serializer.is_valid(), False) + self.assertIn('renamed', serializer.errors) + self.assertNotIn('should_validate_field', serializer.errors) class ValidationSerializer(serializers.Serializer): -- cgit v1.2.3 From 71ab7cda2a28b0df8df54c1446b4780413909acb Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Sat, 21 Dec 2013 21:54:51 +0000 Subject: Additional test for 'source' behaviour. Refs #1302 --- rest_framework/tests/test_validation.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'rest_framework/tests/test_validation.py') diff --git a/rest_framework/tests/test_validation.py b/rest_framework/tests/test_validation.py index 3fb6ba37..8a8187fa 100644 --- a/rest_framework/tests/test_validation.py +++ b/rest_framework/tests/test_validation.py @@ -75,6 +75,10 @@ class TestCustomValidationMethods(TestCase): self.assertFalse(serializer.is_valid()) self.assertIn('renamed', serializer.errors) + def test_custom_validation_method_passing(self): + serializer = ShouldValidateModelSerializer(data={'renamed': 'foo'}) + self.assertTrue(serializer.is_valid()) + class ValidationSerializer(serializers.Serializer): foo = serializers.CharField() -- cgit v1.2.3 From 971578ca345c3d3bae7fd93b87c41d43483b6f05 Mon Sep 17 00:00:00 2001 From: Andreas Pelme Date: Sun, 2 Mar 2014 12:40:30 +0100 Subject: Support for running the test suite with py.test * Get rid of runtests.py * Moved test code from rest_framework/tests and rest_framework/runtests to tests * Invoke py.test from setup.py * Invoke py.test from Travis * Invoke py.test from tox * Changed setUpClass to be just plain setUp in test_permissions.py * Updated contribution guideline to show how to invoke py.test --- rest_framework/tests/test_validation.py | 104 -------------------------------- 1 file changed, 104 deletions(-) delete mode 100644 rest_framework/tests/test_validation.py (limited to 'rest_framework/tests/test_validation.py') diff --git a/rest_framework/tests/test_validation.py b/rest_framework/tests/test_validation.py deleted file mode 100644 index 124c874d..00000000 --- a/rest_framework/tests/test_validation.py +++ /dev/null @@ -1,104 +0,0 @@ -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.test import APIRequestFactory - -factory = APIRequestFactory() - - -# 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('/', {}, 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): - should_validate_field = models.CharField(max_length=255) - - -class ShouldValidateModelSerializer(serializers.ModelSerializer): - renamed = serializers.CharField(source='should_validate_field', required=False) - - def validate_renamed(self, attrs, source): - value = attrs[source] - if len(value) < 3: - raise serializers.ValidationError('Minimum 3 characters.') - return attrs - - class Meta: - model = ShouldValidateModel - fields = ('renamed',) - - -class TestPreSaveValidationExclusionsSerializer(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.assertEqual(serializer.is_valid(), False) - self.assertIn('renamed', serializer.errors) - self.assertNotIn('should_validate_field', serializer.errors) - - -class TestCustomValidationMethods(TestCase): - def test_custom_validation_method_is_executed(self): - serializer = ShouldValidateModelSerializer(data={'renamed': 'fo'}) - self.assertFalse(serializer.is_valid()) - self.assertIn('renamed', serializer.errors) - - def test_custom_validation_method_passing(self): - serializer = ShouldValidateModelSerializer(data={'renamed': 'foo'}) - self.assertTrue(serializer.is_valid()) - - -class ValidationSerializer(serializers.Serializer): - foo = serializers.CharField() - - def validate_foo(self, attrs, source): - raise serializers.ValidationError("foo invalid") - - def validate(self, attrs): - raise serializers.ValidationError("serializer invalid") - - -class TestAvoidValidation(TestCase): - """ - If serializer was initialized with invalid data (None or non dict-like), it - should avoid validation layer (validate_ and validate methods) - """ - 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']}) -- cgit v1.2.3