summaryrefslogtreecommitdiff
path: root/tests/forms_tests/field_tests/test_datefield.py
diff options
context:
space:
mode:
authorPreston Timmons <prestontimmons@gmail.com>2015-08-30 21:13:42 -0500
committerPreston Timmons <prestontimmons@gmail.com>2015-08-31 23:03:55 -0500
commit4c30fa905d9d47b3a2ee82095b1fe56cc2ec2ab5 (patch)
tree2bb04d4ecef539e4ebefbd6d750dfd240ddd7f0c /tests/forms_tests/field_tests/test_datefield.py
parent5153a3bfdcec82324d67ff79862384288cf6afe6 (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.py111
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())