Skip to content

Commit 5a3323c

Browse files
authored
fix: Adding valid HTML to the add snippet form throws an error (#82)
1 parent c3eb8d9 commit 5a3323c

File tree

3 files changed

+41
-6
lines changed

3 files changed

+41
-6
lines changed

djangocms_snippet/forms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ def clean(self):
5858
def save(self, **kwargs):
5959
commit = kwargs.get("commit", True)
6060
snippet = super().save(commit=False)
61+
if not hasattr(snippet, "snippet_grouper"):
62+
snippet.snippet_grouper = SnippetGrouper.objects.create()
6163
if commit:
62-
if not hasattr(snippet, "snippet_grouper"):
63-
snippet.snippet_grouper = SnippetGrouper.objects.create()
6464
snippet.save()
6565
return snippet

tests/test_admin.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
from importlib import reload
22

33
from django.contrib import admin
4+
from django.shortcuts import reverse
45
from django.test import RequestFactory, override_settings
56

67
from cms.test_utils.testcases import CMSTestCase
78

9+
from djangocms_versioning.models import Version
10+
811
from djangocms_snippet import admin as snippet_admin
912
from djangocms_snippet import cms_config
1013
from djangocms_snippet.forms import SnippetForm
@@ -30,6 +33,7 @@ def test_admin_list_display_without_versioning(self):
3033
admin.site.unregister(Snippet)
3134
reload(cms_config)
3235
reload(snippet_admin)
36+
# This has to be declared again, since it will now be constructed without the versioning extension
3337
self.snippet_admin = snippet_admin.SnippetAdmin(Snippet, admin)
3438

3539
list_display = self.snippet_admin.get_list_display(self.snippet_admin_request)
@@ -62,3 +66,34 @@ def test_admin_uses_form(self):
6266
ensure the admin uses this.
6367
"""
6468
self.assertEqual(self.snippet_admin.form, SnippetForm)
69+
70+
71+
class SnippetAdminFormTestCase(CMSTestCase):
72+
def setUp(self):
73+
self.add_url = reverse("admin:djangocms_snippet_snippet_add")
74+
self.changelist_url = reverse("admin:djangocms_snippet_snippet_changelist")
75+
self.superuser = self.get_superuser()
76+
self.snippet_grouper = SnippetGrouper.objects.create()
77+
self.snippet = Snippet.objects.create(
78+
name="Test Snippet",
79+
slug="test-snippet",
80+
html="<h1>This is a test</h1>",
81+
snippet_grouper=self.snippet_grouper,
82+
)
83+
self.snippet_version = Version.objects.create(content=self.snippet, created_by=self.superuser)
84+
85+
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=True)
86+
def test_admin_form_save_method(self):
87+
with self.login_user_context(self.superuser):
88+
response = self.client.post(
89+
self.add_url,
90+
{
91+
"name": "Test Snippet 2",
92+
"html": "<p>Test Save Snippet</p>",
93+
"slug": "test-snippet-2",
94+
})
95+
self.assertRedirects(response, self.changelist_url)
96+
97+
# We should have 2 groupers and snippets, due to the creation of the others in setUp
98+
self.assertEqual(Snippet._base_manager.count(), 2)
99+
self.assertEqual(SnippetGrouper._base_manager.count(), 2)

tests/test_forms.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def test_snippet_form_creates_grouper_with_versioning(self):
6060
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=True)
6161
def test_snippet_form_doesnt_create_grouper_or_snippet_with_no_commit(self):
6262
"""
63-
With versioning enabled, but commit=False, models should not be created
63+
With versioning enabled, but no commit flag, models should still be created
6464
"""
6565
reload(cms_config)
6666
reload(forms)
@@ -74,10 +74,10 @@ def test_snippet_form_doesnt_create_grouper_or_snippet_with_no_commit(self):
7474
self.assertTrue(form.is_valid())
7575

7676
form.clean()
77-
form.save(commit=False)
77+
form.save()
7878

79-
self.assertEqual(SnippetGrouper.objects.count(), 0)
80-
self.assertEqual(Snippet._base_manager.count(), 0)
79+
self.assertEqual(SnippetGrouper.objects.count(), 1)
80+
self.assertEqual(Snippet._base_manager.count(), 1)
8181

8282
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=True)
8383
def test_snippet_form_adds_to_existing_grouper_with_versioning(self):

0 commit comments

Comments
 (0)