112 lines
4.2 KiB
Python
112 lines
4.2 KiB
Python
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())
|