From a2975cb083a01012eb0cb997f0f5b7c2263cfbba Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Sat, 29 Apr 2017 19:00:21 -0400 Subject: [1.11.x] Fixed #28040 -- Updated SplitArrayWidget to use template-based widget rendering. Thanks Preston Timmons for review. Backport of 1ebd295082bb0e6b230cf3bc39fd04bee71c2bd7 from master --- tests/postgres_tests/test_array.py | 64 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 3 deletions(-) (limited to 'tests/postgres_tests/test_array.py') diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py index a11b60e261..a66c92a016 100644 --- a/tests/postgres_tests/test_array.py +++ b/tests/postgres_tests/test_array.py @@ -8,11 +8,11 @@ from django.core import exceptions, serializers, validators from django.core.exceptions import FieldError from django.core.management import call_command from django.db import IntegrityError, connection, models -from django.test import TransactionTestCase, override_settings +from django.test import TransactionTestCase, modify_settings, override_settings from django.test.utils import isolate_apps from django.utils import timezone -from . import PostgreSQLTestCase +from . import PostgreSQLTestCase, PostgreSQLWidgetTestCase from .models import ( ArrayFieldSubclass, CharArrayModel, DateTimeArrayModel, IntegerArrayModel, NestedIntegerArrayModel, NullableIntegerArrayModel, OtherTypesArrayModel, @@ -749,6 +749,8 @@ class TestSplitFormField(PostgreSQLTestCase): with self.assertRaisesMessage(exceptions.ValidationError, msg): SplitArrayField(forms.IntegerField(max_value=100), size=2).clean([0, 101]) + # To locate the widget's template. + @modify_settings(INSTALLED_APPS={'append': 'django.contrib.postgres'}) def test_rendering(self): class SplitForm(forms.Form): array = SplitArrayField(forms.CharField(), size=3) @@ -787,7 +789,63 @@ class TestSplitFormField(PostgreSQLTestCase): self.assertEqual(obj.field, [1, 2]) -class TestSplitFormWidget(PostgreSQLTestCase): +class TestSplitFormWidget(PostgreSQLWidgetTestCase): + + def test_get_context(self): + self.assertEqual( + SplitArrayWidget(forms.TextInput(), size=2).get_context('name', ['val1', 'val2']), + { + 'widget': { + 'name': 'name', + 'is_hidden': False, + 'required': False, + 'value': "['val1', 'val2']", + 'attrs': {}, + 'template_name': 'postgres/widgets/split_array.html', + 'subwidgets': [ + { + 'name': 'name_0', + 'is_hidden': False, + 'required': False, + 'value': 'val1', + 'attrs': {}, + 'template_name': 'django/forms/widgets/text.html', + 'type': 'text', + }, + { + 'name': 'name_1', + 'is_hidden': False, + 'required': False, + 'value': 'val2', + 'attrs': {}, + 'template_name': 'django/forms/widgets/text.html', + 'type': 'text', + }, + ] + } + } + ) + + def test_render(self): + self.check_html( + SplitArrayWidget(forms.TextInput(), size=2), 'array', None, + """ + + + """ + ) + + def test_render_attrs(self): + self.check_html( + SplitArrayWidget(forms.TextInput(), size=2), + 'array', ['val1', 'val2'], attrs={'id': 'foo'}, + html=( + """ + + + """ + ) + ) def test_value_omitted_from_data(self): widget = SplitArrayWidget(forms.TextInput(), size=2) -- cgit v1.3