From 4c30fa905d9d47b3a2ee82095b1fe56cc2ec2ab5 Mon Sep 17 00:00:00 2001 From: Preston Timmons Date: Sun, 30 Aug 2015 21:13:42 -0500 Subject: 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. --- .../widget_tests/test_selectdatewidget.py | 479 +++++++++++++++++++++ 1 file changed, 479 insertions(+) create mode 100644 tests/forms_tests/widget_tests/test_selectdatewidget.py (limited to 'tests/forms_tests/widget_tests/test_selectdatewidget.py') diff --git a/tests/forms_tests/widget_tests/test_selectdatewidget.py b/tests/forms_tests/widget_tests/test_selectdatewidget.py new file mode 100644 index 0000000000..e95c083532 --- /dev/null +++ b/tests/forms_tests/widget_tests/test_selectdatewidget.py @@ -0,0 +1,479 @@ +from datetime import date + +from django.forms import DateField, Form, SelectDateWidget +from django.test import override_settings +from django.utils import translation +from django.utils.dates import MONTHS_AP + +from .base import WidgetTest + + +class SelectDateWidgetTest(WidgetTest): + maxDiff = None + widget = SelectDateWidget( + years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), + ) + + def test_render_empty(self): + self.check_html(self.widget, 'mydate', '', html=( + """ + + + + + + """ + )) + + def test_render_none(self): + """ + Rendering the None or '' values should yield the same output. + """ + self.assertHTMLEqual( + self.widget.render('mydate', None), + self.widget.render('mydate', ''), + ) + + def test_render_string(self): + self.check_html(self.widget, 'mydate', '2010-04-15', html=( + """ + + + + + + """ + )) + + def test_render_datetime(self): + self.assertHTMLEqual( + self.widget.render('mydate', date(2010, 4, 15)), + self.widget.render('mydate', '2010-04-15'), + ) + + def test_render_invalid_date(self): + """ + Invalid dates should still render the failed date. + """ + self.check_html(self.widget, 'mydate', '2010-02-31', html=( + """ + + + + + + """ + )) + + def test_custom_months(self): + widget = SelectDateWidget(months=MONTHS_AP, years=('2013',)) + self.check_html(widget, 'mydate', '', html=( + """ + + + + + + """ + )) + + def test_selectdate_required(self): + class GetNotRequiredDate(Form): + mydate = DateField(widget=SelectDateWidget, required=False) + + class GetRequiredDate(Form): + mydate = DateField(widget=SelectDateWidget, required=True) + + self.assertFalse(GetNotRequiredDate().fields['mydate'].widget.is_required) + self.assertTrue(GetRequiredDate().fields['mydate'].widget.is_required) + + def test_selectdate_empty_label(self): + w = SelectDateWidget(years=('2014',), empty_label='empty_label') + + # Rendering the default state with empty_label setted as string. + self.assertInHTML('', w.render('mydate', ''), count=3) + + w = SelectDateWidget(years=('2014',), empty_label=('empty_year', 'empty_month', 'empty_day')) + + # Rendering the default state with empty_label tuple. + self.assertHTMLEqual( + w.render('mydate', ''), + """ + + + + + + """, + ) + + self.assertRaisesMessage(ValueError, 'empty_label list/tuple must have 3 elements.', + SelectDateWidget, years=('2014',), empty_label=('not enough', 'values')) + + @override_settings(USE_L10N=True) + @translation.override('nl') + def test_l10n(self): + w = SelectDateWidget( + years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016') + ) + self.assertEqual( + w.value_from_datadict({'date_year': '2010', 'date_month': '8', 'date_day': '13'}, {}, 'date'), + '13-08-2010', + ) + + self.assertHTMLEqual( + w.render('date', '13-08-2010'), + """ + + + + + + """, + ) + + # Even with an invalid date, the widget should reflect the entered value (#17401). + self.assertEqual(w.render('mydate', '2010-02-30').count('selected="selected"'), 3) + + # Years before 1900 should work. + w = SelectDateWidget(years=('1899',)) + self.assertEqual( + w.value_from_datadict({'date_year': '1899', 'date_month': '8', 'date_day': '13'}, {}, 'date'), + '13-08-1899', + ) -- cgit v1.3