summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGeorge Marshall <george@georgemarshall.name>2015-11-16 22:28:03 -0800
committerTim Graham <timograham@gmail.com>2015-11-24 11:10:19 -0500
commit11d54e8f0da96d355b8dff17af8d5aa6bb3386db (patch)
tree046d134902c6c9073e72e334590da717984fa2d0 /tests
parent7fccc6e8faa511ed2d620671f2375da56d79f23d (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.py32
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)