From 0b59ea3343ef6f035064cfae1608f54c5a3fd147 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Tue, 6 Sep 2016 17:41:54 -0400 Subject: [1.10.x] Fixed #27186 -- Fixed model form default fallback for MultiWidget, FileInput, SplitDateTimeWidget, SelectDateWidget, and SplitArrayWidget. Thanks Matt Westcott for the review. Backport of 3507d4e773aa9ff2336e7230ba231c4ba6eb568f from master --- tests/forms_tests/widget_tests/test_checkboxinput.py | 4 ++++ tests/forms_tests/widget_tests/test_fileinput.py | 4 ++++ tests/forms_tests/widget_tests/test_multiwidget.py | 7 +++++++ tests/forms_tests/widget_tests/test_selectdatewidget.py | 8 ++++++++ tests/forms_tests/widget_tests/test_widget.py | 12 ++++++++++++ 5 files changed, 35 insertions(+) create mode 100644 tests/forms_tests/widget_tests/test_widget.py (limited to 'tests/forms_tests') diff --git a/tests/forms_tests/widget_tests/test_checkboxinput.py b/tests/forms_tests/widget_tests/test_checkboxinput.py index 77b03b9ea9..ecfc2105c8 100644 --- a/tests/forms_tests/widget_tests/test_checkboxinput.py +++ b/tests/forms_tests/widget_tests/test_checkboxinput.py @@ -85,3 +85,7 @@ class CheckboxInputTest(WidgetTest): def test_value_from_datadict_string_int(self): value = self.widget.value_from_datadict({'testing': '0'}, {}, 'testing') self.assertIs(value, True) + + def test_value_omitted_from_data(self): + self.assertIs(self.widget.value_omitted_from_data({'field': 'value'}, {}, 'field'), False) + self.assertIs(self.widget.value_omitted_from_data({}, {}, 'field'), False) diff --git a/tests/forms_tests/widget_tests/test_fileinput.py b/tests/forms_tests/widget_tests/test_fileinput.py index eb1c9d81ed..6e96dc7b5f 100644 --- a/tests/forms_tests/widget_tests/test_fileinput.py +++ b/tests/forms_tests/widget_tests/test_fileinput.py @@ -14,3 +14,7 @@ class FileInputTest(WidgetTest): self.check_html(self.widget, 'email', 'test@example.com', html='') self.check_html(self.widget, 'email', '', html='') self.check_html(self.widget, 'email', None, html='') + + def test_value_omitted_from_data(self): + self.assertIs(self.widget.value_omitted_from_data({}, {}, 'field'), True) + self.assertIs(self.widget.value_omitted_from_data({}, {'field': 'value'}, 'field'), False) diff --git a/tests/forms_tests/widget_tests/test_multiwidget.py b/tests/forms_tests/widget_tests/test_multiwidget.py index bb6f8bfc4f..99aecea1ab 100644 --- a/tests/forms_tests/widget_tests/test_multiwidget.py +++ b/tests/forms_tests/widget_tests/test_multiwidget.py @@ -118,6 +118,13 @@ class MultiWidgetTest(WidgetTest): '' )) + def test_value_omitted_from_data(self): + widget = MyMultiWidget(widgets=(TextInput(), TextInput())) + self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True) + self.assertIs(widget.value_omitted_from_data({'field_0': 'x'}, {}, 'field'), False) + self.assertIs(widget.value_omitted_from_data({'field_1': 'y'}, {}, 'field'), False) + self.assertIs(widget.value_omitted_from_data({'field_0': 'x', 'field_1': 'y'}, {}, 'field'), False) + def test_needs_multipart_true(self): """ needs_multipart_form should be True if any widgets need it. diff --git a/tests/forms_tests/widget_tests/test_selectdatewidget.py b/tests/forms_tests/widget_tests/test_selectdatewidget.py index 6efa240b66..fcce916f76 100644 --- a/tests/forms_tests/widget_tests/test_selectdatewidget.py +++ b/tests/forms_tests/widget_tests/test_selectdatewidget.py @@ -477,3 +477,11 @@ class SelectDateWidgetTest(WidgetTest): w.value_from_datadict({'date_year': '1899', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-1899', ) + + def test_value_omitted_from_data(self): + self.assertIs(self.widget.value_omitted_from_data({}, {}, 'field'), True) + self.assertIs(self.widget.value_omitted_from_data({'field_month': '12'}, {}, 'field'), False) + self.assertIs(self.widget.value_omitted_from_data({'field_year': '2000'}, {}, 'field'), False) + self.assertIs(self.widget.value_omitted_from_data({'field_day': '1'}, {}, 'field'), False) + data = {'field_day': '1', 'field_month': '12', 'field_year': '2000'} + self.assertIs(self.widget.value_omitted_from_data(data, {}, 'field'), False) diff --git a/tests/forms_tests/widget_tests/test_widget.py b/tests/forms_tests/widget_tests/test_widget.py new file mode 100644 index 0000000000..3911627a0c --- /dev/null +++ b/tests/forms_tests/widget_tests/test_widget.py @@ -0,0 +1,12 @@ +from __future__ import unicode_literals + +from django.forms import Widget +from django.test import SimpleTestCase + + +class WidgetTests(SimpleTestCase): + + def test_value_omitted_from_data(self): + widget = Widget() + self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True) + self.assertIs(widget.value_omitted_from_data({'field': 'value'}, {}, 'field'), False) -- cgit v1.3