summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDavid Smith <smithdc@gmail.com>2022-11-02 20:13:16 +0000
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-03-24 10:16:30 +0100
commitcad376f844c7bdeeee7607a7c0ea8ae52061309b (patch)
tree674bcfb8a4b99c752bff23c029494987ed62f5ef /tests
parentd33368b4ab6ae0c01e83d525f7e1655156a640d1 (diff)
Fixed #34077 -- Added form field rendering.
Diffstat (limited to 'tests')
-rw-r--r--tests/forms_tests/templates/forms_tests/custom_field.html3
-rw-r--r--tests/forms_tests/tests/test_forms.py39
-rw-r--r--tests/forms_tests/tests/test_utils.py13
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), "")