From 4c30fa905d9d47b3a2ee82095b1fe56cc2ec2ab5 Mon Sep 17 00:00:00 2001 From: Preston Timmons Date: Sun, 30 Aug 2015 21:13:42 -0500 Subject: [PATCH] Rewrote form widget tests as proper unittests. This is preparation for landing the template-based widget rendering patch and goes a long way to making these tests more useful for future development. The old doctest heritage is strong here. --- tests/forms_tests/field_tests/__init__.py | 0 .../forms_tests/field_tests/test_datefield.py | 111 + .../field_tests/test_multivaluefield.py | 162 ++ tests/forms_tests/tests/test_widgets.py | 1828 +---------------- tests/forms_tests/widget_tests/__init__.py | 0 tests/forms_tests/widget_tests/base.py | 9 + .../widget_tests/test_checkboxinput.py | 87 + .../test_checkboxselectmultiple.py | 115 ++ .../widget_tests/test_clearablefileinput.py | 126 ++ .../widget_tests/test_dateinput.py | 47 + .../widget_tests/test_datetimeinput.py | 63 + .../widget_tests/test_fileinput.py | 16 + .../widget_tests/test_hiddeninput.py | 10 + .../widget_tests/test_multiplehiddeninput.py | 75 + .../widget_tests/test_multiwidget.py | 163 ++ .../widget_tests/test_nullbooleanselect.py | 64 + .../widget_tests/test_passwordinput.py | 26 + .../widget_tests/test_radioselect.py | 84 + tests/forms_tests/widget_tests/test_select.py | 250 +++ .../widget_tests/test_selectdatewidget.py | 479 +++++ .../widget_tests/test_selectmultiple.py | 125 ++ .../widget_tests/test_splitdatetimewidget.py | 51 + .../test_splithiddendatetimewidget.py | 42 + .../forms_tests/widget_tests/test_textarea.py | 34 + .../widget_tests/test_textinput.py | 78 + .../widget_tests/test_timeinput.py | 50 + 26 files changed, 2270 insertions(+), 1825 deletions(-) create mode 100644 tests/forms_tests/field_tests/__init__.py create mode 100644 tests/forms_tests/field_tests/test_datefield.py create mode 100644 tests/forms_tests/field_tests/test_multivaluefield.py create mode 100644 tests/forms_tests/widget_tests/__init__.py create mode 100644 tests/forms_tests/widget_tests/base.py create mode 100644 tests/forms_tests/widget_tests/test_checkboxinput.py create mode 100644 tests/forms_tests/widget_tests/test_checkboxselectmultiple.py create mode 100644 tests/forms_tests/widget_tests/test_clearablefileinput.py create mode 100644 tests/forms_tests/widget_tests/test_dateinput.py create mode 100644 tests/forms_tests/widget_tests/test_datetimeinput.py create mode 100644 tests/forms_tests/widget_tests/test_fileinput.py create mode 100644 tests/forms_tests/widget_tests/test_hiddeninput.py create mode 100644 tests/forms_tests/widget_tests/test_multiplehiddeninput.py create mode 100644 tests/forms_tests/widget_tests/test_multiwidget.py create mode 100644 tests/forms_tests/widget_tests/test_nullbooleanselect.py create mode 100644 tests/forms_tests/widget_tests/test_passwordinput.py create mode 100644 tests/forms_tests/widget_tests/test_radioselect.py create mode 100644 tests/forms_tests/widget_tests/test_select.py create mode 100644 tests/forms_tests/widget_tests/test_selectdatewidget.py create mode 100644 tests/forms_tests/widget_tests/test_selectmultiple.py create mode 100644 tests/forms_tests/widget_tests/test_splitdatetimewidget.py create mode 100644 tests/forms_tests/widget_tests/test_splithiddendatetimewidget.py create mode 100644 tests/forms_tests/widget_tests/test_textarea.py create mode 100644 tests/forms_tests/widget_tests/test_textinput.py create mode 100644 tests/forms_tests/widget_tests/test_timeinput.py diff --git a/tests/forms_tests/field_tests/__init__.py b/tests/forms_tests/field_tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/forms_tests/field_tests/test_datefield.py b/tests/forms_tests/field_tests/test_datefield.py new file mode 100644 index 0000000000..6b66cb2d52 --- /dev/null +++ b/tests/forms_tests/field_tests/test_datefield.py @@ -0,0 +1,111 @@ +from datetime import date + +from django.forms import DateField, Form, HiddenInput, SelectDateWidget +from django.test import SimpleTestCase, override_settings +from django.utils import translation + + +class GetDate(Form): + mydate = DateField(widget=SelectDateWidget) + + +class DateFieldTest(SimpleTestCase): + + def test_form_field(self): + a = GetDate({'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008'}) + self.assertTrue(a.is_valid()) + self.assertEqual(a.cleaned_data['mydate'], date(2008, 4, 1)) + + # As with any widget that implements get_value_from_datadict(), we must + # accept the input from the "as_hidden" rendering as well. + self.assertHTMLEqual( + a['mydate'].as_hidden(), + '', + ) + + b = GetDate({'mydate': '2008-4-1'}) + self.assertTrue(b.is_valid()) + self.assertEqual(b.cleaned_data['mydate'], date(2008, 4, 1)) + + # Invalid dates shouldn't be allowed + c = GetDate({'mydate_month': '2', 'mydate_day': '31', 'mydate_year': '2010'}) + self.assertFalse(c.is_valid()) + self.assertEqual(c.errors, {'mydate': ['Enter a valid date.']}) + + # label tag is correctly associated with month dropdown + d = GetDate({'mydate_month': '1', 'mydate_day': '1', 'mydate_year': '2010'}) + self.assertIn('