mirror of
https://github.com/django/django.git
synced 2024-11-20 00:14:08 +00:00
4c30fa905d
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.
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())
|