mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	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())
 |