diff options
| author | David Smith <smithdc@gmail.com> | 2022-11-02 20:13:16 +0000 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-03-24 10:16:30 +0100 |
| commit | cad376f844c7bdeeee7607a7c0ea8ae52061309b (patch) | |
| tree | 674bcfb8a4b99c752bff23c029494987ed62f5ef /tests | |
| parent | d33368b4ab6ae0c01e83d525f7e1655156a640d1 (diff) | |
Fixed #34077 -- Added form field rendering.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/forms_tests/templates/forms_tests/custom_field.html | 3 | ||||
| -rw-r--r-- | tests/forms_tests/tests/test_forms.py | 39 | ||||
| -rw-r--r-- | tests/forms_tests/tests/test_utils.py | 13 |
3 files changed, 55 insertions, 0 deletions
diff --git a/tests/forms_tests/templates/forms_tests/custom_field.html b/tests/forms_tests/templates/forms_tests/custom_field.html new file mode 100644 index 0000000000..5d19c9ed49 --- /dev/null +++ b/tests/forms_tests/templates/forms_tests/custom_field.html @@ -0,0 +1,3 @@ +{{ field.label_tag }} +<p>Custom Field<p> +{{ field }} diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py index 14e3755b68..5563dc35fd 100644 --- a/tests/forms_tests/tests/test_forms.py +++ b/tests/forms_tests/tests/test_forms.py @@ -4602,6 +4602,7 @@ class Jinja2FormsTestCase(FormsTestCase): class CustomRenderer(DjangoTemplates): form_template_name = "forms_tests/form_snippet.html" + field_template_name = "forms_tests/custom_field.html" class RendererTests(SimpleTestCase): @@ -5009,6 +5010,28 @@ class TemplateTests(SimpleTestCase): "('username', 'adrian')]", ) + def test_custom_field_template(self): + class MyForm(Form): + first_name = CharField(template_name="forms_tests/custom_field.html") + + f = MyForm() + self.assertHTMLEqual( + f.render(), + '<div><label for="id_first_name">First name:</label><p>Custom Field<p>' + '<input type="text" name="first_name" required id="id_first_name"></div>', + ) + + def test_custom_field_render_template(self): + class MyForm(Form): + first_name = CharField() + + f = MyForm() + self.assertHTMLEqual( + f["first_name"].render(template_name="forms_tests/custom_field.html"), + '<label for="id_first_name">First name:</label><p>Custom Field<p>' + '<input type="text" name="first_name" required id="id_first_name">', + ) + class OverrideTests(SimpleTestCase): @override_settings(FORM_RENDERER="forms_tests.tests.test_forms.CustomRenderer") @@ -5026,6 +5049,22 @@ class OverrideTests(SimpleTestCase): self.assertHTMLEqual(html, expected) get_default_renderer.cache_clear() + @override_settings(FORM_RENDERER="forms_tests.tests.test_forms.CustomRenderer") + def test_custom_renderer_field_template_name(self): + class Person(Form): + first_name = CharField() + + get_default_renderer.cache_clear() + t = Template("{{ form.first_name.as_field_group }}") + html = t.render(Context({"form": Person()})) + expected = """ + <label for="id_first_name">First name:</label> + <p>Custom Field<p> + <input type="text" name="first_name" required id="id_first_name"> + """ + self.assertHTMLEqual(html, expected) + get_default_renderer.cache_clear() + def test_per_form_template_name(self): class Person(Form): first_name = CharField() diff --git a/tests/forms_tests/tests/test_utils.py b/tests/forms_tests/tests/test_utils.py index 2e5672f93c..f9a5d4c82a 100644 --- a/tests/forms_tests/tests/test_utils.py +++ b/tests/forms_tests/tests/test_utils.py @@ -5,6 +5,7 @@ from django.core.exceptions import ValidationError from django.forms.utils import ( ErrorDict, ErrorList, + RenderableFieldMixin, RenderableMixin, flatatt, pretty_name, @@ -258,6 +259,18 @@ class FormsUtilsTestCase(SimpleTestCase): with self.assertRaisesMessage(NotImplementedError, msg): mixin.get_context() + def test_field_mixin_as_hidden_must_be_implemented(self): + mixin = RenderableFieldMixin() + msg = "Subclasses of RenderableFieldMixin must provide an as_hidden() method." + with self.assertRaisesMessage(NotImplementedError, msg): + mixin.as_hidden() + + def test_field_mixin_as_widget_must_be_implemented(self): + mixin = RenderableFieldMixin() + msg = "Subclasses of RenderableFieldMixin must provide an as_widget() method." + with self.assertRaisesMessage(NotImplementedError, msg): + mixin.as_widget() + def test_pretty_name(self): self.assertEqual(pretty_name("john_doe"), "John doe") self.assertEqual(pretty_name(None), "") |
