Skip to content

Commit 6105d51

Browse files
committed
It's probably a load of repeated bollocks but let's commit it anyway
1 parent 63b737e commit 6105d51

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

tests/testapp/test_form_field.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
from django import forms
2+
from django.contrib.admin import widgets
3+
from django.test import TestCase
4+
5+
from django_prose_editor.fields import ProseEditorFormField, _is
6+
from django_prose_editor.widgets import AdminProseEditorWidget, ProseEditorWidget
7+
8+
9+
class CustomWidget(forms.Textarea):
10+
"""A custom widget that is not a ProseEditorWidget."""
11+
12+
13+
class IsHelperFunctionTest(TestCase):
14+
def test_is_function(self):
15+
"""Test the _is helper function for widget type checking."""
16+
# Test with classes
17+
self.assertTrue(_is(ProseEditorWidget, ProseEditorWidget))
18+
self.assertTrue(_is(CustomWidget, forms.Textarea))
19+
self.assertFalse(_is(CustomWidget, ProseEditorWidget))
20+
21+
# Test with instances
22+
self.assertTrue(_is(ProseEditorWidget(), ProseEditorWidget))
23+
self.assertTrue(_is(CustomWidget(), forms.Textarea))
24+
self.assertFalse(_is(ProseEditorWidget(), widgets.AdminTextareaWidget))
25+
26+
27+
class ProseEditorFormFieldTest(TestCase):
28+
def test_widget_handling(self):
29+
"""Test the widget handling in ProseEditorFormField."""
30+
# Test when widget is None (default case, line 80 branch)
31+
field = ProseEditorFormField()
32+
self.assertIsInstance(field.widget, ProseEditorWidget)
33+
34+
# Test when widget is a class that is not a ProseEditorWidget (line 81 branch)
35+
field = ProseEditorFormField(widget=CustomWidget)
36+
self.assertIsInstance(field.widget, ProseEditorWidget)
37+
38+
# Test when widget is an instance that is not a ProseEditorWidget (line 81 branch)
39+
field = ProseEditorFormField(widget=CustomWidget())
40+
self.assertIsInstance(field.widget, ProseEditorWidget)
41+
42+
# Test with AdminTextareaWidget class (line 79 branch)
43+
field = ProseEditorFormField(widget=widgets.AdminTextareaWidget)
44+
self.assertIsInstance(field.widget, AdminProseEditorWidget)
45+
46+
# Test with AdminTextareaWidget instance (line 79 branch)
47+
field = ProseEditorFormField(widget=widgets.AdminTextareaWidget())
48+
self.assertIsInstance(field.widget, AdminProseEditorWidget)
49+
50+
# For completeness, also test with a ProseEditorWidget class and instance
51+
field = ProseEditorFormField(widget=ProseEditorWidget)
52+
self.assertIsInstance(field.widget, ProseEditorWidget)
53+
54+
field = ProseEditorFormField(widget=ProseEditorWidget())
55+
self.assertIsInstance(field.widget, ProseEditorWidget)
56+
57+
58+
class FormWithProseEditorField(forms.Form):
59+
"""A form using ProseEditorFormField with different widget configurations."""
60+
61+
# Default widget (None)
62+
content_default = ProseEditorFormField()
63+
64+
# Non-ProseEditorWidget class
65+
content_custom_class = ProseEditorFormField(widget=CustomWidget)
66+
67+
# Non-ProseEditorWidget instance
68+
content_custom_instance = ProseEditorFormField(widget=CustomWidget())
69+
70+
# AdminTextareaWidget class
71+
content_admin_class = ProseEditorFormField(widget=widgets.AdminTextareaWidget)
72+
73+
# AdminTextareaWidget instance
74+
content_admin_instance = ProseEditorFormField(widget=widgets.AdminTextareaWidget())
75+
76+
77+
class FormRenderingTest(TestCase):
78+
def test_form_rendering(self):
79+
"""Test that forms with different widget configurations render correctly."""
80+
form = FormWithProseEditorField()
81+
82+
# The form should render all fields with appropriate ProseEditor widgets
83+
html = form.as_p()
84+
85+
# Count the number of data-django-prose-editor attributes
86+
# All fields should use the data attribute with default preset
87+
self.assertEqual(html.count("data-django-prose-editor-default"), 5)
88+
89+
# All fields should use ProseEditor widgets (either standard or admin)
90+
total_prose_editors = len(
91+
[
92+
field
93+
for field in form.fields.values()
94+
if isinstance(field.widget, ProseEditorWidget | AdminProseEditorWidget)
95+
]
96+
)
97+
self.assertEqual(
98+
total_prose_editors, 5
99+
) # All 5 fields should use ProseEditor widgets

0 commit comments

Comments
 (0)