summaryrefslogtreecommitdiff
path: root/tests/forms_tests
diff options
context:
space:
mode:
authorJon Dufresne <jon.dufresne@gmail.com>2016-08-12 10:59:01 -0700
committerTim Graham <timograham@gmail.com>2016-08-12 13:59:01 -0400
commitfab46ce6f5a0a58c4e5e39c9e5e412702beb4a64 (patch)
tree361730d067142bfc0e51ecfd2e65b9d719f08a07 /tests/forms_tests
parentf842d1011c1195aa26071a6ab6f96e0b8d907343 (diff)
Fixed #27037 -- Prevented required attribute on ClearableFileInput when initial data exists.
Diffstat (limited to 'tests/forms_tests')
-rw-r--r--tests/forms_tests/tests/test_forms.py9
-rw-r--r--tests/forms_tests/widget_tests/test_checkboxselectmultiple.py8
-rw-r--r--tests/forms_tests/widget_tests/test_clearablefileinput.py6
-rw-r--r--tests/forms_tests/widget_tests/test_hiddeninput.py7
-rw-r--r--tests/forms_tests/widget_tests/test_textinput.py6
5 files changed, 36 insertions, 0 deletions
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: <input type="password" name="password" required />
'<tr><th>File1:</th><td><input type="file" name="file1" required /></td></tr>',
)
+ # 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(),
+ '<tr><th>File1:</th><td><input type="file" name="file1" /></td></tr>',
+ )
+
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):
</ul>
"""
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, '<input name="myfile" type="file" />')
+
+ 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='<input type="hidden" name="email" />')
+
+ 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='<input onBlur="function(\'foo\')" type="text" name="email" />')
+
+ 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)