diff options
| author | Preston Timmons <prestontimmons@gmail.com> | 2015-08-30 21:13:42 -0500 |
|---|---|---|
| committer | Preston Timmons <prestontimmons@gmail.com> | 2015-08-31 23:03:55 -0500 |
| commit | 4c30fa905d9d47b3a2ee82095b1fe56cc2ec2ab5 (patch) | |
| tree | 2bb04d4ecef539e4ebefbd6d750dfd240ddd7f0c /tests/forms_tests/field_tests/test_datefield.py | |
| parent | 5153a3bfdcec82324d67ff79862384288cf6afe6 (diff) | |
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.
Diffstat (limited to 'tests/forms_tests/field_tests/test_datefield.py')
| -rw-r--r-- | tests/forms_tests/field_tests/test_datefield.py | 111 |
1 files changed, 111 insertions, 0 deletions
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(), + '<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate" />', + ) + + 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('<label for="id_mydate_month">', d.as_p()) + + @override_settings(USE_L10N=True) + @translation.override('nl') + def test_l10n_date_changed(self): + """ + Ensure that DateField.has_changed() with SelectDateWidget works + correctly with a localized date format (#17165). + """ + # With Field.show_hidden_initial=False + b = GetDate({ + 'mydate_year': '2008', + 'mydate_month': '4', + 'mydate_day': '1', + }, initial={'mydate': date(2008, 4, 1)}) + self.assertFalse(b.has_changed()) + + b = GetDate({ + 'mydate_year': '2008', + 'mydate_month': '4', + 'mydate_day': '2', + }, initial={'mydate': date(2008, 4, 1)}) + self.assertTrue(b.has_changed()) + + # With Field.show_hidden_initial=True + class GetDateShowHiddenInitial(Form): + mydate = DateField(widget=SelectDateWidget, show_hidden_initial=True) + + b = GetDateShowHiddenInitial({ + 'mydate_year': '2008', + 'mydate_month': '4', + 'mydate_day': '1', + 'initial-mydate': HiddenInput()._format_value(date(2008, 4, 1)), + }, initial={'mydate': date(2008, 4, 1)}) + self.assertFalse(b.has_changed()) + + b = GetDateShowHiddenInitial({ + 'mydate_year': '2008', + 'mydate_month': '4', + 'mydate_day': '22', + 'initial-mydate': HiddenInput()._format_value(date(2008, 4, 1)), + }, initial={'mydate': date(2008, 4, 1)}) + self.assertTrue(b.has_changed()) + + b = GetDateShowHiddenInitial({ + 'mydate_year': '2008', + 'mydate_month': '4', + 'mydate_day': '22', + 'initial-mydate': HiddenInput()._format_value(date(2008, 4, 1)), + }, initial={'mydate': date(2008, 4, 22)}) + self.assertTrue(b.has_changed()) + + b = GetDateShowHiddenInitial({ + 'mydate_year': '2008', + 'mydate_month': '4', + 'mydate_day': '22', + 'initial-mydate': HiddenInput()._format_value(date(2008, 4, 22)), + }, initial={'mydate': date(2008, 4, 1)}) + self.assertFalse(b.has_changed()) + + @override_settings(USE_L10N=True) + @translation.override('nl') + def test_l10n_invalid_date_in(self): + # Invalid dates shouldn't be allowed + a = GetDate({'mydate_month': '2', 'mydate_day': '31', 'mydate_year': '2010'}) + self.assertFalse(a.is_valid()) + # 'Geef een geldige datum op.' = 'Enter a valid date.' + self.assertEqual(a.errors, {'mydate': ['Geef een geldige datum op.']}) + + @override_settings(USE_L10N=True) + @translation.override('nl') + def test_form_label_association(self): + # label tag is correctly associated with first rendered dropdown + a = GetDate({'mydate_month': '1', 'mydate_day': '1', 'mydate_year': '2010'}) + self.assertIn('<label for="id_mydate_day">', a.as_p()) |
