summaryrefslogtreecommitdiff
path: root/tests/forms_tests
diff options
context:
space:
mode:
authorJacob Rief <jacob.rief@gmail.com>2023-04-08 22:10:17 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-06-16 08:38:28 +0200
commit1fe0b167af3611cca79e8a8092ee929312193c6f (patch)
treebfdc7ee5dd09b1f194b7308932b6de46c2881374 /tests/forms_tests
parent549d6ffeb6d626b023acc40c3bb2093b4b25b3d6 (diff)
Fixed #34473 -- Fixed step validation for form fields with non-zero minimum value.
Diffstat (limited to 'tests/forms_tests')
-rw-r--r--tests/forms_tests/field_tests/test_decimalfield.py19
-rw-r--r--tests/forms_tests/field_tests/test_floatfield.py12
-rw-r--r--tests/forms_tests/field_tests/test_integerfield.py16
3 files changed, 47 insertions, 0 deletions
diff --git a/tests/forms_tests/field_tests/test_decimalfield.py b/tests/forms_tests/field_tests/test_decimalfield.py
index 4e24d553f3..9d26bc88b0 100644
--- a/tests/forms_tests/field_tests/test_decimalfield.py
+++ b/tests/forms_tests/field_tests/test_decimalfield.py
@@ -152,6 +152,25 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
with self.assertRaisesMessage(ValidationError, msg):
f.clean("1.1")
+ def test_decimalfield_step_size_min_value(self):
+ f = DecimalField(
+ step_size=decimal.Decimal("0.3"),
+ min_value=decimal.Decimal("-0.4"),
+ )
+ self.assertWidgetRendersTo(
+ f,
+ '<input name="f" min="-0.4" step="0.3" type="number" id="id_f" required>',
+ )
+ msg = (
+ "Ensure this value is a multiple of step size 0.3, starting from -0.4, "
+ "e.g. -0.4, -0.1, 0.2, and so on."
+ )
+ with self.assertRaisesMessage(ValidationError, msg):
+ f.clean("1")
+ self.assertEqual(f.clean("0.2"), decimal.Decimal("0.2"))
+ self.assertEqual(f.clean(2), decimal.Decimal(2))
+ self.assertEqual(f.step_size, decimal.Decimal("0.3"))
+
def test_decimalfield_scientific(self):
f = DecimalField(max_digits=4, decimal_places=2)
with self.assertRaisesMessage(ValidationError, "Ensure that there are no more"):
diff --git a/tests/forms_tests/field_tests/test_floatfield.py b/tests/forms_tests/field_tests/test_floatfield.py
index 276520f04d..77b404102c 100644
--- a/tests/forms_tests/field_tests/test_floatfield.py
+++ b/tests/forms_tests/field_tests/test_floatfield.py
@@ -84,6 +84,18 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
self.assertEqual(-1.26, f.clean("-1.26"))
self.assertEqual(f.step_size, 0.02)
+ def test_floatfield_step_size_min_value(self):
+ f = FloatField(step_size=0.02, min_value=0.01)
+ msg = (
+ "Ensure this value is a multiple of step size 0.02, starting from 0.01, "
+ "e.g. 0.01, 0.03, 0.05, and so on."
+ )
+ with self.assertRaisesMessage(ValidationError, msg):
+ f.clean("0.02")
+ self.assertEqual(f.clean("2.33"), 2.33)
+ self.assertEqual(f.clean("0.11"), 0.11)
+ self.assertEqual(f.step_size, 0.02)
+
def test_floatfield_widget_attrs(self):
f = FloatField(widget=NumberInput(attrs={"step": 0.01, "max": 1.0, "min": 0.0}))
self.assertWidgetRendersTo(
diff --git a/tests/forms_tests/field_tests/test_integerfield.py b/tests/forms_tests/field_tests/test_integerfield.py
index 1361b5cc9e..a76c2fd508 100644
--- a/tests/forms_tests/field_tests/test_integerfield.py
+++ b/tests/forms_tests/field_tests/test_integerfield.py
@@ -126,6 +126,22 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
self.assertEqual(12, f.clean("12"))
self.assertEqual(f.step_size, 3)
+ def test_integerfield_step_size_min_value(self):
+ f = IntegerField(step_size=3, min_value=-1)
+ self.assertWidgetRendersTo(
+ f,
+ '<input name="f" min="-1" step="3" type="number" id="id_f" required>',
+ )
+ msg = (
+ "Ensure this value is a multiple of step size 3, starting from -1, e.g. "
+ "-1, 2, 5, and so on."
+ )
+ with self.assertRaisesMessage(ValidationError, msg):
+ f.clean("9")
+ self.assertEqual(f.clean("2"), 2)
+ self.assertEqual(f.clean("-1"), -1)
+ self.assertEqual(f.step_size, 3)
+
def test_integerfield_localized(self):
"""
A localized IntegerField's widget renders to a text input without any