From 3a82b5f655446f0ca89e3b6a92b100aa458f348f Mon Sep 17 00:00:00 2001 From: Kapil Bansal Date: Thu, 12 May 2022 11:30:47 +0200 Subject: Fixed #32559 -- Added 'step_size’ to numeric form fields. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jacob Rief --- tests/forms_tests/field_tests/test_floatfield.py | 15 +++++++++++++++ tests/forms_tests/field_tests/test_integerfield.py | 14 ++++++++++++++ tests/validators/tests.py | 18 ++++++++++++++++++ 3 files changed, 47 insertions(+) (limited to 'tests') diff --git a/tests/forms_tests/field_tests/test_floatfield.py b/tests/forms_tests/field_tests/test_floatfield.py index f6022807be..94676fb9ee 100644 --- a/tests/forms_tests/field_tests/test_floatfield.py +++ b/tests/forms_tests/field_tests/test_floatfield.py @@ -70,6 +70,21 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase): self.assertEqual(f.max_value, 1.5) self.assertEqual(f.min_value, 0.5) + def test_floatfield_4(self): + f = FloatField(step_size=0.02) + self.assertWidgetRendersTo( + f, + '', + ) + msg = "'Ensure this value is a multiple of step size 0.02.'" + with self.assertRaisesMessage(ValidationError, msg): + f.clean("0.01") + self.assertEqual(2.34, f.clean("2.34")) + self.assertEqual(2.1, f.clean("2.1")) + self.assertEqual(-0.50, f.clean("-.5")) + self.assertEqual(-1.26, f.clean("-1.26")) + 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 15314d53a4..1361b5cc9e 100644 --- a/tests/forms_tests/field_tests/test_integerfield.py +++ b/tests/forms_tests/field_tests/test_integerfield.py @@ -112,6 +112,20 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase): self.assertEqual(f.max_value, 20) self.assertEqual(f.min_value, 10) + def test_integerfield_6(self): + f = IntegerField(step_size=3) + self.assertWidgetRendersTo( + f, + '', + ) + with self.assertRaisesMessage( + ValidationError, "'Ensure this value is a multiple of step size 3.'" + ): + f.clean("10") + self.assertEqual(12, f.clean(12)) + self.assertEqual(12, f.clean("12")) + self.assertEqual(f.step_size, 3) + def test_integerfield_localized(self): """ A localized IntegerField's widget renders to a text input without any diff --git a/tests/validators/tests.py b/tests/validators/tests.py index 79369b172e..f9ffdfd605 100644 --- a/tests/validators/tests.py +++ b/tests/validators/tests.py @@ -17,6 +17,7 @@ from django.core.validators import ( MinValueValidator, ProhibitNullCharactersValidator, RegexValidator, + StepValueValidator, URLValidator, int_list_validator, validate_comma_separated_integer_list, @@ -440,12 +441,21 @@ TEST_DATA = [ # limit_value may be a callable. (MinValueValidator(lambda: 1), 0, ValidationError), (MinValueValidator(lambda: 1), 1, None), + (StepValueValidator(3), 0, None), (MaxLengthValidator(10), "", None), (MaxLengthValidator(10), 10 * "x", None), (MaxLengthValidator(10), 15 * "x", ValidationError), (MinLengthValidator(10), 15 * "x", None), (MinLengthValidator(10), 10 * "x", None), (MinLengthValidator(10), "", ValidationError), + (StepValueValidator(3), 1, ValidationError), + (StepValueValidator(3), 8, ValidationError), + (StepValueValidator(3), 9, None), + (StepValueValidator(0.001), 0.55, None), + (StepValueValidator(0.001), 0.5555, ValidationError), + (StepValueValidator(Decimal(0.02)), 0.88, None), + (StepValueValidator(Decimal(0.02)), Decimal(0.88), None), + (StepValueValidator(Decimal(0.02)), Decimal(0.77), ValidationError), (URLValidator(EXTENDED_SCHEMES), "file://localhost/path", None), (URLValidator(EXTENDED_SCHEMES), "git://example.com/", None), ( @@ -715,6 +725,10 @@ class TestValidatorEquality(TestCase): MaxValueValidator(44), ) self.assertEqual(MaxValueValidator(44), mock.ANY) + self.assertEqual( + StepValueValidator(0.003), + StepValueValidator(0.003), + ) self.assertNotEqual( MaxValueValidator(44), MinValueValidator(44), @@ -723,6 +737,10 @@ class TestValidatorEquality(TestCase): MinValueValidator(45), MinValueValidator(11), ) + self.assertNotEqual( + StepValueValidator(3), + StepValueValidator(2), + ) def test_decimal_equality(self): self.assertEqual( -- cgit v1.3