diff options
Diffstat (limited to 'tests/regressiontests/forms/validators.py')
| -rw-r--r-- | tests/regressiontests/forms/validators.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/regressiontests/forms/validators.py b/tests/regressiontests/forms/validators.py new file mode 100644 index 0000000000..becf4e2825 --- /dev/null +++ b/tests/regressiontests/forms/validators.py @@ -0,0 +1,34 @@ +from unittest import TestCase + +from django import forms +from django.core import validators +from django.core.exceptions import ValidationError + +class AlwaysFailingValidator(validators.ComplexValidator): + def __call__(self, value, all_values={}, obj=None): + raise ValidationError('AlwaysFailingValidator') + +class TestFieldWithValidators(TestCase): + def test_all_errors_get_reported(self): + field = forms.CharField( + validators=[validators.validate_integer, validators.validate_email,] + ) + self.assertRaises(ValidationError, field.clean, 'not int nor mail') + try: + field.clean('not int nor mail') + except ValidationError, e: + self.assertEqual(2, len(e.messages)) + +class TestFormWithValidators(TestCase): + def test_all_complex_validators_get_run_even_if_they_fail(self): + class MyForm(forms.Form): + validator_field = forms.CharField( + validators=[ + AlwaysFailingValidator(), + AlwaysFailingValidator(), + ] + ) + form = MyForm({'validator_field': 'some value'}) + self.assertFalse(form.is_valid()) + self.assertEqual(['validator_field'], form.errors.keys()) + self.assertEqual(['AlwaysFailingValidator', 'AlwaysFailingValidator'], form.errors['validator_field']) |
