From fab46ce6f5a0a58c4e5e39c9e5e412702beb4a64 Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Fri, 12 Aug 2016 10:59:01 -0700 Subject: Fixed #27037 -- Prevented required attribute on ClearableFileInput when initial data exists. --- tests/forms_tests/tests/test_forms.py | 9 +++++++++ tests/forms_tests/widget_tests/test_checkboxselectmultiple.py | 8 ++++++++ tests/forms_tests/widget_tests/test_clearablefileinput.py | 6 ++++++ tests/forms_tests/widget_tests/test_hiddeninput.py | 7 +++++++ tests/forms_tests/widget_tests/test_textinput.py | 6 ++++++ 5 files changed, 36 insertions(+) (limited to 'tests/forms_tests') diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index 773b89a7bc..0e0ea9f1c2 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -2360,6 +2360,15 @@ Password: 'File1:', ) + # A required file field with initial data should not contain the + # required HTML attribute. The file input is left blank by the user to + # keep the existing, initial value. + f = FileForm(initial={'file1': 'resume.txt'}, auto_id=False) + self.assertHTMLEqual( + f.as_table(), + 'File1:', + ) + def test_basic_processing_in_view(self): class UserRegistration(Form): username = CharField(max_length=10) diff --git a/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py b/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py index 10d025e4c2..2d73f2b589 100644 --- a/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py +++ b/tests/forms_tests/widget_tests/test_checkboxselectmultiple.py @@ -112,3 +112,11 @@ class CheckboxSelectMultipleTest(WidgetTest): """ self.check_html(widget, 'letters', ['a', 'c'], html=html) + + def test_use_required_attribute(self): + widget = self.widget(choices=self.beatles) + # Always False because browser validation would require all checkboxes + # to be checked instead of at least one. + self.assertIs(widget.use_required_attribute(None), False) + self.assertIs(widget.use_required_attribute([]), False) + self.assertIs(widget.use_required_attribute(['J', 'P']), False) diff --git a/tests/forms_tests/widget_tests/test_clearablefileinput.py b/tests/forms_tests/widget_tests/test_clearablefileinput.py index 720f17b035..3727d0c0df 100644 --- a/tests/forms_tests/widget_tests/test_clearablefileinput.py +++ b/tests/forms_tests/widget_tests/test_clearablefileinput.py @@ -143,3 +143,9 @@ class ClearableFileInputTest(WidgetTest): html = self.widget.render('myfile', NoURLFieldFile()) self.assertHTMLEqual(html, '') + + def test_use_required_attribute(self): + # False when initial data exists. The file input is left blank by the + # user to keep the existing, initial value. + self.assertIs(self.widget.use_required_attribute(None), True) + self.assertIs(self.widget.use_required_attribute('resume.txt'), False) diff --git a/tests/forms_tests/widget_tests/test_hiddeninput.py b/tests/forms_tests/widget_tests/test_hiddeninput.py index 039e89d5cc..d1604a31e4 100644 --- a/tests/forms_tests/widget_tests/test_hiddeninput.py +++ b/tests/forms_tests/widget_tests/test_hiddeninput.py @@ -8,3 +8,10 @@ class HiddenInputTest(WidgetTest): def test_render(self): self.check_html(self.widget, 'email', '', html='') + + def test_use_required_attribute(self): + # Always False to avoid browser validation on inputs hidden from the + # user. + self.assertIs(self.widget.use_required_attribute(None), False) + self.assertIs(self.widget.use_required_attribute(''), False) + self.assertIs(self.widget.use_required_attribute('foo'), False) diff --git a/tests/forms_tests/widget_tests/test_textinput.py b/tests/forms_tests/widget_tests/test_textinput.py index 33e455a160..65b5da4e03 100644 --- a/tests/forms_tests/widget_tests/test_textinput.py +++ b/tests/forms_tests/widget_tests/test_textinput.py @@ -76,3 +76,9 @@ class TextInputTest(WidgetTest): def test_attrs_safestring(self): widget = TextInput(attrs={'onBlur': mark_safe("function('foo')")}) self.check_html(widget, 'email', '', html='') + + def test_use_required_attribute(self): + # Text inputs can safely trigger the browser validation. + self.assertIs(self.widget.use_required_attribute(None), True) + self.assertIs(self.widget.use_required_attribute(''), True) + self.assertIs(self.widget.use_required_attribute('resume.txt'), True) -- cgit v1.3