Skip to content

Commit 6cb31ef

Browse files
committed
PR updates
1 parent 7570829 commit 6cb31ef

File tree

9 files changed

+53
-29
lines changed

9 files changed

+53
-29
lines changed

djangocms_snippet/admin.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,17 @@
99
from .views import SnippetPreviewView
1010

1111

12-
1312
# Use the version mixin if djangocms-versioning is installed and enabled
1413
snippet_admin_classes = [admin.ModelAdmin]
14+
djangocms_versioning_enabled = SnippetCMSAppConfig.djangocms_versioning_enabled
1515

1616
try:
1717
from djangocms_versioning.admin import ExtendedVersionAdminMixin
1818

19-
if SnippetCMSAppConfig.djangocms_versioning_enabled:
20-
snippet_admin_classes += [ExtendedVersionAdminMixin]
19+
if djangocms_versioning_enabled:
20+
snippet_admin_classes.insert(0, ExtendedVersionAdminMixin)
2121
except ImportError:
2222
pass
23-
24-
from djangocms_versioning.admin import ExtendedVersionAdminMixin
25-
26-
djangocms_versioning_installed = True
27-
except ImportError:
28-
djangocms_versioning_installed = False
29-
30-
31-
djangocms_versioning_enabled = SnippetCMSAppConfig.djangocms_versioning_enabled
32-
33-
snippet_admin_classes = [
34-
admin.ModelAdmin,
35-
]
36-
37-
38-
if djangocms_versioning_installed and djangocms_versioning_enabled:
39-
snippet_admin_classes = [ExtendedVersionAdminMixin] + snippet_admin_classes
4023

4124

4225
class SnippetAdmin(*snippet_admin_classes):

djangocms_snippet/cms_config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616

1717
class SnippetCMSAppConfig(CMSAppConfig):
1818
djangocms_versioning_enabled = getattr(
19-
settings, 'DJANGOCMS_SNIPPET_VERSIONING_ENABLED', False
19+
settings, 'DJANGOCMS_SNIPPET_VERSIONING_ENABLED', True
2020
)
2121
djangocms_moderation_enabled = getattr(
22-
settings, 'DJANGOCMS_SNIPPET_MODERATION_ENABLED', False
22+
settings, 'DJANGOCMS_SNIPPET_MODERATION_ENABLED', True
2323
)
2424

2525
cms_enabled = True

djangocms_snippet/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def clean(self):
3838

3939
if djangocms_versioning_enabled and is_versioning_installed:
4040
if snippet_grouper:
41-
snippet_queryset.exclude(snippet_grouper=snippet_grouper)
41+
snippet_queryset = snippet_queryset.exclude(snippet_grouper=snippet_grouper)
4242

4343
for snippet in snippet_queryset:
4444
if snippet.name == name:

djangocms_snippet/models.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,15 @@
1111

1212

1313
class SnippetGrouper(models.Model):
14-
pass
14+
@property
15+
def name(self):
16+
snippet_qs = Snippet._base_manager.filter(
17+
snippet_grouper=self
18+
)
19+
return snippet_qs.last().name or super().__str__
20+
21+
def __str__(self):
22+
return self.name
1523

1624

1725
# Stores the actual data
@@ -91,7 +99,3 @@ class Meta:
9199
@property
92100
def snippet(self):
93101
return self.snippet_grouper.snippet_set.first()
94-
95-
def __str__(self):
96-
# Return the referenced snippet's name rather than the default (ID #)
97-
return self.snippet.name

tests/settings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
'ALLOWED_HOSTS': ['localhost'],
1616
'DJANGOCMS_SNIPPET_VERSIONING_ENABLED': True,
1717
'DJANGOCMS_SNIPPET_MODERATION_ENABLED': True,
18+
'CMS_TEMPLATES': (
19+
("page.html", "Normal page"),
20+
),
1821
}
1922

2023

tests/test_admin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def test_admin_list_display_without_versioning(self):
3333
self.assertEqual(self.snippet_admin.__class__.__bases__, (admin.ModelAdmin, ))
3434
self.assertEqual(list_display, ('slug', 'name'))
3535

36+
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=True)
3637
def test_admin_list_display_with_versioning(self):
3738
"""
3839
With versioning enabled, list_display should be populated with both versioning related items, and the
@@ -41,6 +42,7 @@ def test_admin_list_display_with_versioning(self):
4142
from djangocms_versioning.admin import ExtendedVersionAdminMixin
4243
list_display = self.snippet_admin.get_list_display(self.snippet_admin_request)
4344

45+
# Mixins should always come first in the class bases
4446
self.assertEqual(
4547
self.snippet_admin.__class__.__bases__, (ExtendedVersionAdminMixin, admin.ModelAdmin)
4648
)

tests/test_forms.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from djangocms_snippet.forms import SnippetForm
66
from djangocms_snippet.models import Snippet, SnippetGrouper
77

8+
from .utils.factories import SnippetWithVersionFactory
9+
810

911
class SnippetFormTestCase(CMSTestCase):
1012

@@ -27,7 +29,9 @@ def test_snippet_form_creates_grouper_no_versioning(self):
2729
form.save()
2830

2931
self.assertEqual(SnippetGrouper.objects.count(), 1)
32+
self.assertEqual(Snippet._base_manager.count(), 1)
3033

34+
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=True)
3135
def test_snippet_form_creates_grouper_with_versioning(self):
3236
"""
3337
With versioning enabled, groupers should also be created in the background.
@@ -45,7 +49,9 @@ def test_snippet_form_creates_grouper_with_versioning(self):
4549
form.save()
4650

4751
self.assertEqual(SnippetGrouper.objects.count(), 1)
52+
self.assertEqual(Snippet._base_manager.count(), 1)
4853

54+
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=True)
4955
def test_snippet_form_adds_to_existing_grouper_with_versioning(self):
5056
"""
5157
With versioning enabled, if a grouper already exists, a new one shouldn't be created
@@ -66,6 +72,7 @@ def test_snippet_form_adds_to_existing_grouper_with_versioning(self):
6672
form.save()
6773

6874
self.assertEqual(SnippetGrouper.objects.count(), 1)
75+
self.assertEqual(Snippet._base_manager.count(), 1)
6976

7077
form_data["html"] = "<h2>Test Title</h2>"
7178

@@ -77,7 +84,9 @@ def test_snippet_form_adds_to_existing_grouper_with_versioning(self):
7784
form.save()
7885

7986
self.assertEqual(SnippetGrouper.objects.count(), 1)
87+
self.assertEqual(Snippet._base_manager.count(), 2)
8088

89+
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=True)
8190
def test_snippet_form_versioning_enabled(self):
8291
"""
8392
With versioning enabled, the snippet form doesn't have to create groupers, but does have to validate
@@ -96,6 +105,7 @@ def test_snippet_form_versioning_enabled(self):
96105
form.clean()
97106
form.save()
98107

108+
# Publish the old created version
99109
snippet = Snippet._base_manager.last()
100110
version = snippet.versions.create(created_by=self.get_superuser())
101111
version.publish(user=self.get_superuser())
@@ -113,3 +123,23 @@ def test_snippet_form_versioning_enabled(self):
113123
new_form.clean()
114124

115125
self.assertDictEqual(new_form.errors, {'slug': ['A Snippet with this slug already exists']})
126+
127+
def test_snippet_form_validation_multiple_version_states_in_grouper(self):
128+
"""
129+
Snippet forms should be valid regardless of the versions, or states which already exist within its grouper.
130+
"""
131+
snippet_to_archive = SnippetWithVersionFactory()
132+
snippet_to_archive.versions.first().publish(user=self.get_superuser())
133+
snippet_to_publish = SnippetWithVersionFactory(snippet_grouper=snippet_to_archive.snippet_grouper)
134+
SnippetWithVersionFactory(snippet_grouper=snippet_to_publish.snippet_grouper)
135+
136+
form_data = {
137+
"name": snippet_to_archive.name,
138+
"slug": snippet_to_archive.slug,
139+
"html": "<p>Hello World!</p>",
140+
"snippet_grouper": snippet_to_archive.snippet_grouper.id,
141+
}
142+
143+
form = SnippetForm(form_data)
144+
145+
self.assertTrue(form.is_valid())

tests/test_models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ def test_snippet_ptr_instance(self):
4141
instance = SnippetPtr.objects.first()
4242

4343
# test strings
44-
self.assertEqual(str(instance), "test snippet")
44+
self.assertEqual(instance.snippet_grouper.name, "test snippet")

tests/test_views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from cms.api import add_plugin, create_page
2+
from cms.models import PageContent
13
from cms.test_utils.testcases import CMSTestCase
24
from cms.utils.urlutils import admin_reverse
35

0 commit comments

Comments
 (0)