123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- from datetime import date, datetime
- from django.forms import (
- DateField, Form, HiddenInput, SelectDateWidget, ValidationError,
- )
- 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))
-
-
- 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))
-
- 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.']})
-
- 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):
- """
- DateField.has_changed() with SelectDateWidget works with a localized
- date format (#17165).
- """
-
- 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())
-
- 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):
-
- a = GetDate({'mydate_month': '2', 'mydate_day': '31', 'mydate_year': '2010'})
- self.assertFalse(a.is_valid())
-
- self.assertEqual(a.errors, {'mydate': ['Voer een geldige datum in.']})
- @override_settings(USE_L10N=True)
- @translation.override('nl')
- def test_form_label_association(self):
-
- a = GetDate({'mydate_month': '1', 'mydate_day': '1', 'mydate_year': '2010'})
- self.assertIn('<label for="id_mydate_day">', a.as_p())
- def test_datefield_1(self):
- f = DateField()
- self.assertEqual(date(2006, 10, 25), f.clean(date(2006, 10, 25)))
- self.assertEqual(date(2006, 10, 25), f.clean(datetime(2006, 10, 25, 14, 30)))
- self.assertEqual(date(2006, 10, 25), f.clean(datetime(2006, 10, 25, 14, 30, 59)))
- self.assertEqual(date(2006, 10, 25), f.clean(datetime(2006, 10, 25, 14, 30, 59, 200)))
- self.assertEqual(date(2006, 10, 25), f.clean('2006-10-25'))
- self.assertEqual(date(2006, 10, 25), f.clean('10/25/2006'))
- self.assertEqual(date(2006, 10, 25), f.clean('10/25/06'))
- self.assertEqual(date(2006, 10, 25), f.clean('Oct 25 2006'))
- self.assertEqual(date(2006, 10, 25), f.clean('October 25 2006'))
- self.assertEqual(date(2006, 10, 25), f.clean('October 25, 2006'))
- self.assertEqual(date(2006, 10, 25), f.clean('25 October 2006'))
- self.assertEqual(date(2006, 10, 25), f.clean('25 October, 2006'))
- with self.assertRaisesMessage(ValidationError, "'Enter a valid date.'"):
- f.clean('2006-4-31')
- with self.assertRaisesMessage(ValidationError, "'Enter a valid date.'"):
- f.clean('200a-10-25')
- with self.assertRaisesMessage(ValidationError, "'Enter a valid date.'"):
- f.clean('25/10/06')
- with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
- f.clean(None)
- def test_datefield_2(self):
- f = DateField(required=False)
- self.assertIsNone(f.clean(None))
- self.assertEqual('None', repr(f.clean(None)))
- self.assertIsNone(f.clean(''))
- self.assertEqual('None', repr(f.clean('')))
- def test_datefield_3(self):
- f = DateField(input_formats=['%Y %m %d'])
- self.assertEqual(date(2006, 10, 25), f.clean(date(2006, 10, 25)))
- self.assertEqual(date(2006, 10, 25), f.clean(datetime(2006, 10, 25, 14, 30)))
- self.assertEqual(date(2006, 10, 25), f.clean('2006 10 25'))
- with self.assertRaisesMessage(ValidationError, "'Enter a valid date.'"):
- f.clean('2006-10-25')
- with self.assertRaisesMessage(ValidationError, "'Enter a valid date.'"):
- f.clean('10/25/2006')
- with self.assertRaisesMessage(ValidationError, "'Enter a valid date.'"):
- f.clean('10/25/06')
- def test_datefield_4(self):
-
- f = DateField()
- self.assertEqual(date(2006, 10, 25), f.clean(' 10/25/2006 '))
- self.assertEqual(date(2006, 10, 25), f.clean(' 10/25/06 '))
- self.assertEqual(date(2006, 10, 25), f.clean(' Oct 25 2006 '))
- self.assertEqual(date(2006, 10, 25), f.clean(' October 25 2006 '))
- self.assertEqual(date(2006, 10, 25), f.clean(' October 25, 2006 '))
- self.assertEqual(date(2006, 10, 25), f.clean(' 25 October 2006 '))
- with self.assertRaisesMessage(ValidationError, "'Enter a valid date.'"):
- f.clean(' ')
- def test_datefield_5(self):
-
- f = DateField()
- with self.assertRaisesMessage(ValidationError, "'Enter a valid date.'"):
- f.clean('a\x00b')
- def test_datefield_changed(self):
- format = '%d/%m/%Y'
- f = DateField(input_formats=[format])
- d = date(2007, 9, 17)
- self.assertFalse(f.has_changed(d, '17/09/2007'))
- def test_datefield_strptime(self):
- """field.strptime() doesn't raise a UnicodeEncodeError (#16123)"""
- f = DateField()
- try:
- f.strptime('31 мая 2011', '%d-%b-%y')
- except Exception as e:
-
-
- self.assertEqual(e.__class__, ValueError)
|