diff options
| author | George Marshall <george@georgemarshall.name> | 2015-11-16 22:28:03 -0800 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-11-24 11:10:19 -0500 |
| commit | 11d54e8f0da96d355b8dff17af8d5aa6bb3386db (patch) | |
| tree | 046d134902c6c9073e72e334590da717984fa2d0 /tests | |
| parent | 7fccc6e8faa511ed2d620671f2375da56d79f23d (diff) | |
[1.9.x] Fixed #25767 -- Fixed data truncation possibility with Positive(Small)IntegerField on MySQL.
Backport of 710e11d076b9e5ef3e3b486dfb70bb55b788691c from master
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/model_fields/tests.py | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py index 23e90cccb8..34793eacdb 100644 --- a/tests/model_fields/tests.py +++ b/tests/model_fields/tests.py @@ -624,6 +624,12 @@ class IntegerFieldTests(test.TestCase): model = IntegerModel documented_range = (-2147483648, 2147483647) + @property + def backend_range(self): + field = self.model._meta.get_field('value') + internal_type = field.get_internal_type() + return connection.ops.integer_field_range(internal_type) + def test_documented_range(self): """ Ensure that values within the documented safe range pass validation, @@ -645,14 +651,34 @@ class IntegerFieldTests(test.TestCase): self.assertEqual(qs.count(), 1) self.assertEqual(qs[0].value, max_value) + def test_backend_range_save(self): + """ + Ensure that backend specific range can be saved without corruption. + """ + min_value, max_value = self.backend_range + + if min_value is not None: + instance = self.model(value=min_value) + instance.full_clean() + instance.save() + qs = self.model.objects.filter(value__lte=min_value) + self.assertEqual(qs.count(), 1) + self.assertEqual(qs[0].value, min_value) + + if max_value is not None: + instance = self.model(value=max_value) + instance.full_clean() + instance.save() + qs = self.model.objects.filter(value__gte=max_value) + self.assertEqual(qs.count(), 1) + self.assertEqual(qs[0].value, max_value) + def test_backend_range_validation(self): """ Ensure that backend specific range are enforced at the model validation level. ref #12030. """ - field = self.model._meta.get_field('value') - internal_type = field.get_internal_type() - min_value, max_value = connection.ops.integer_field_range(internal_type) + min_value, max_value = self.backend_range if min_value is not None: instance = self.model(value=min_value - 1) |
