Skip to content

Commit 2cb0fb5

Browse files
authored
chore: fix column per row not been saved and added tests (#291)
1 parent cd3923d commit 2cb0fb5

File tree

3 files changed

+82
-5
lines changed

3 files changed

+82
-5
lines changed

djangocms_frontend/contrib/grid/forms.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,11 @@ class Meta:
127127
)
128128

129129

130-
GridRowBaseForm.Meta.entangled_fields["config"] += extra_fields_column.keys()
130+
GridRowBaseForm._meta.entangled_fields["config"] += extra_fields_column.keys()
131131

132132

133133
GridRowForm = type(
134-
"GridRowBaseForm",
134+
"GridRowForm",
135135
(GridRowBaseForm,),
136136
copy(extra_fields_column),
137137
)
@@ -226,10 +226,10 @@ def clean(self):
226226
widget=forms.HiddenInput() if "{size}_me" in getattr(settings, "EXCL_COL_PROP", ()) else forms.CheckboxInput(),
227227
)
228228

229+
GridColumnBaseForm._meta.entangled_fields["config"] += extra_fields_column.keys()
230+
229231
GridColumnForm = type(
230232
"GridColumnForm",
231233
(GridColumnBaseForm,),
232234
copy(extra_fields_column),
233235
)
234-
235-
GridColumnForm._meta.entangled_fields["config"] += extra_fields_column.keys()

tests/grid/test_forms.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from django.test import TestCase
2+
3+
from djangocms_frontend.contrib.grid.forms import (
4+
GridColumnForm,
5+
GridRowForm,
6+
GridContainerForm)
7+
8+
9+
class GridFormTestCase(TestCase):
10+
def test_grid_container_form(self):
11+
form = GridContainerForm(data={
12+
"container_type": "container",
13+
"tag_type": "div",
14+
"margin_devices": ['xl'],
15+
"padding_devices": ['xs'],
16+
})
17+
self.assertTrue(form.is_valid())
18+
self.assertIn("container_type", form.instance.config)
19+
self.assertEqual(form.instance.container_type, "container")
20+
21+
def test_grid_row_form(self):
22+
form = GridRowForm(data={
23+
"margin_devices": ['xl'],
24+
"padding_devices": ['xs'],
25+
"row_cols_xs": 5,
26+
})
27+
self.assertTrue(form.is_valid())
28+
self.assertIn("row_cols_xs", form.instance.config)
29+
self.assertIn("row_cols_xxl", form.instance.config)
30+
self.assertEqual(form.instance.row_cols_xs, 5)
31+
32+
def test_grid_column_form(self):
33+
form = GridColumnForm(data={
34+
"margin_devices": ['xl'],
35+
"padding_devices": ['xs'],
36+
"text_alignment": "",
37+
"xs_col": "6",
38+
"xl_offset": "",
39+
40+
})
41+
42+
self.assertTrue(form.is_valid())
43+
self.assertIn("md_me", form.instance.config)
44+
self.assertEqual(form.instance.xs_col, 6)

tests/test_fields.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
from django import forms
12
from django.test import TestCase
23

3-
from djangocms_frontend.fields import AttributesField, TagTypeField, TagTypeFormField
4+
from djangocms_frontend.settings import DEVICE_CHOICES
5+
from djangocms_frontend.fields import (
6+
AttributesField, TagTypeField,
7+
TagTypeFormField, DeviceChoiceField, OptionalDeviceChoiceField)
48

59

610
class FieldsTestCase(TestCase):
@@ -31,3 +35,32 @@ def test_tag_type_field(self):
3135
("aside", "aside"),
3236
],
3337
)
38+
39+
def test_optional_device_choice_field(self):
40+
class Form(forms.Form):
41+
odc = OptionalDeviceChoiceField()
42+
odc_not_required = OptionalDeviceChoiceField(required=False)
43+
44+
form = Form(data={"odc": [size for size, _ in DEVICE_CHOICES]})
45+
self.assertTrue(form.is_valid(), form.errors)
46+
self.assertEqual(form.cleaned_data["odc"], None)
47+
48+
form_1 = Form(data={"odc": ['xs', 'sm']})
49+
self.assertTrue(form_1.is_valid(), form_1.errors)
50+
self.assertEqual(form_1.cleaned_data["odc"], ['xs', 'sm'])
51+
52+
def test_device_choice_field(self):
53+
class Form(forms.Form):
54+
dc = DeviceChoiceField()
55+
56+
class Form2(forms.Form):
57+
dc_not_required = DeviceChoiceField(required=False)
58+
59+
form = Form(data={"dc": ["xs"]})
60+
self.assertTrue(form.is_valid(), form.errors)
61+
self.assertEqual(form.cleaned_data["dc"], ["xs"])
62+
63+
form_1 = Form2(data={})
64+
self.assertFalse(form_1.is_valid())
65+
self.assertFormError(form_1, "dc_not_required",
66+
["Please select at least one device size"])

0 commit comments

Comments
 (0)