diff options
| author | Scott Fitsimones <iscottonline@gmail.com> | 2019-04-05 21:40:46 -0700 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-04-19 08:21:29 +0200 |
| commit | 95811c3de9334c313522982c3d125a8c2ff7ab72 (patch) | |
| tree | d40279328801156f5555d298766c2a342ceeff2f /tests | |
| parent | bb54a2daeea5dde2fca0b7feddd94e26ea69b619 (diff) | |
[2.2.x] Fixed #30328 -- Fixed crash of IntegerField.validators when limit_value in a custom validator is callable.
Backport of a14c0fda15db7e0eb982ac7b68d47b45fc95b4cb from master
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/model_fields/test_integerfield.py | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/tests/model_fields/test_integerfield.py b/tests/model_fields/test_integerfield.py index 5c7ba47fbb..626b67b00b 100644 --- a/tests/model_fields/test_integerfield.py +++ b/tests/model_fields/test_integerfield.py @@ -98,27 +98,31 @@ class IntegerFieldTests(TestCase): """ min_backend_value, max_backend_value = self.backend_range - if min_backend_value is not None: - min_custom_value = min_backend_value + 1 - ranged_value_field = self.model._meta.get_field('value').__class__( - validators=[validators.MinValueValidator(min_custom_value)] - ) - field_range_message = validators.MinValueValidator.message % { - 'limit_value': min_custom_value, - } - with self.assertRaisesMessage(ValidationError, "[%r]" % field_range_message): - ranged_value_field.run_validators(min_backend_value - 1) + for callable_limit in (True, False): + with self.subTest(callable_limit=callable_limit): + if min_backend_value is not None: + min_custom_value = min_backend_value + 1 + limit_value = (lambda: min_custom_value) if callable_limit else min_custom_value + ranged_value_field = self.model._meta.get_field('value').__class__( + validators=[validators.MinValueValidator(limit_value)] + ) + field_range_message = validators.MinValueValidator.message % { + 'limit_value': min_custom_value, + } + with self.assertRaisesMessage(ValidationError, '[%r]' % field_range_message): + ranged_value_field.run_validators(min_backend_value - 1) - if max_backend_value is not None: - max_custom_value = max_backend_value - 1 - ranged_value_field = self.model._meta.get_field('value').__class__( - validators=[validators.MaxValueValidator(max_custom_value)] - ) - field_range_message = validators.MaxValueValidator.message % { - 'limit_value': max_custom_value, - } - with self.assertRaisesMessage(ValidationError, "[%r]" % field_range_message): - ranged_value_field.run_validators(max_backend_value + 1) + if max_backend_value is not None: + max_custom_value = max_backend_value - 1 + limit_value = (lambda: max_custom_value) if callable_limit else max_custom_value + ranged_value_field = self.model._meta.get_field('value').__class__( + validators=[validators.MaxValueValidator(limit_value)] + ) + field_range_message = validators.MaxValueValidator.message % { + 'limit_value': max_custom_value, + } + with self.assertRaisesMessage(ValidationError, '[%r]' % field_range_message): + ranged_value_field.run_validators(max_backend_value + 1) def test_types(self): instance = self.model(value=0) |
