Skip to content

Commit 4c80aa5

Browse files
authored
fix: Do not show edit action for version objects where editing is not possible (#405)
* Fix: Do not show edit action for version objects where editing is not possible * fix ruff errors * Fix tests * Fix linting
1 parent f726bc2 commit 4c80aa5

File tree

7 files changed

+40
-15
lines changed

7 files changed

+40
-15
lines changed

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ jobs:
1414
- run: python -Im pip install --user ruff
1515

1616
- name: Run ruff
17-
run: ruff --output-format=github djangocms_versioning tests
17+
run: ruff check --output-format=github djangocms_versioning tests

djangocms_versioning/admin.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ def get_actions_list(self):
491491
actions = [
492492
self._get_preview_link,
493493
self._get_edit_link,
494-
]
494+
]
495495
if "state_indicator" not in self.versioning_list_display:
496496
# State indicator mixin loaded?
497497
actions.append(self._get_manage_versions_link)
@@ -729,6 +729,10 @@ def _get_unpublish_link(self, obj, request, disabled=False):
729729
def _get_edit_link(self, obj, request, disabled=False):
730730
"""Helper function to get the html link to the edit action
731731
"""
732+
733+
if not obj.check_edit_redirect.as_bool(request.user):
734+
return ""
735+
732736
# Only show if no draft exists
733737
if obj.state == PUBLISHED:
734738
pks_for_grouper = obj.versionable.for_content_grouping_values(
@@ -758,7 +762,7 @@ def _get_edit_link(self, obj, request, disabled=False):
758762
title=_("Edit") if icon == "pencil" else _("New Draft"),
759763
name="edit",
760764
action="post",
761-
disabled=not obj.check_edit_redirect.as_bool(request.user) or disabled,
765+
disabled=disabled,
762766
keepsideframe=keepsideframe,
763767
)
764768

tests/test_admin.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -528,9 +528,9 @@ def test_revert_action_link_enable_state(self):
528528
'cms-action-revert '
529529
'js-action '
530530
'js-keep-sideframe" '
531-
'href="%s" '
531+
f'href="{draft_revert_url}" '
532532
'title="Revert">'
533-
) % draft_revert_url
533+
)
534534
self.assertIn(expected_enabled_state, actual_enabled_control.replace("\n", ""))
535535

536536
def test_revert_action_link_for_draft_state(self):
@@ -599,9 +599,9 @@ def test_discard_action_link_enabled_state(self):
599599
'cms-action-discard '
600600
'js-action '
601601
'js-keep-sideframe" '
602-
'href="%s" '
602+
f'href="{draft_discard_url}" '
603603
'title="Discard">'
604-
) % draft_discard_url
604+
)
605605
self.assertIn(expected_enabled_state, actual_enabled_control.replace("\n", ""))
606606

607607
def test_discard_action_link_for_archive_state(self):
@@ -664,11 +664,11 @@ def test_revert_action_link_for_archive_state(self):
664664
'cms-action-revert '
665665
'js-action '
666666
'js-keep-sideframe" '
667-
'href="%s" '
667+
f'href="{draft_revert_url}" '
668668
'title="Revert">'
669669
'<span class="cms-icon cms-icon-undo"></span>'
670670
'</a>'
671-
) % draft_revert_url
671+
)
672672

673673
self.assertIn(
674674
expected_disabled_control, actual_disabled_control.replace("\n", "")

tests/test_extensions.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def test_title_extension_admin_monkey_patch_save(self):
117117
poll_extension = PollTitleExtensionFactory(extended_object=self.version.content)
118118
model_site = PollExtensionAdmin(admin_site=admin.AdminSite(), model=PollPageContentExtension)
119119
test_url = admin_reverse("extended_polls_pollpagecontentextension_change", args=(poll_extension.pk,))
120-
test_url += "?extended_object=%s" % self.version.content.pk
120+
test_url += f"?extended_object={self.version.content.pk}"
121121
request = RequestFactory().post(path=test_url)
122122
request.user = self.get_superuser()
123123

@@ -137,7 +137,7 @@ def test_title_extension_admin_monkey_patch_save_date_modified_updated(self):
137137
model_site = PollExtensionAdmin(admin_site=admin.AdminSite(), model=PollPageContentExtension)
138138
pre_changes_date_modified = Version.objects.get(id=self.version.pk).modified
139139
test_url = admin_reverse("extended_polls_pollpagecontentextension_change", args=(poll_extension.pk,))
140-
test_url += "?extended_object=%s" % self.version.content.pk
140+
test_url += f"?extended_object={self.version.content.pk}"
141141

142142
request = RequestFactory().post(path=test_url)
143143
request.user = self.get_superuser()
@@ -155,7 +155,7 @@ def test_title_extension_admin_monkeypatch_add_view(self):
155155
with self.login_user_context(self.get_superuser()):
156156
response = self.client.get(
157157
admin_reverse("extended_polls_pollpagecontentextension_add") +
158-
"?extended_object=%s" % self.version.content.pk,
158+
f"?extended_object={self.version.content.pk}",
159159
follow=True
160160
)
161161
self.assertEqual(response.status_code, 200)

tests/test_handlers.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def test_modified_date(self):
2121
def test_add_plugin(self):
2222
version = factories.PageVersionFactory()
2323
placeholder = factories.PlaceholderFactory(source=version.content)
24+
placeholder.page.get_absolute_url = lambda *args, **kwargs: "/test_page/" # Fake URL needed for URI
2425
poll = factories.PollFactory()
2526
dt = datetime(2016, 6, 6)
2627
with freeze_time(dt):
@@ -45,6 +46,7 @@ def test_change_plugin(self):
4546
plugin = add_plugin(
4647
placeholder, "PollPlugin", version.content.language, poll=poll
4748
)
49+
plugin.page.get_absolute_url = lambda *args, **kwargs: "/test_page/" # Fake URL needed for URI
4850

4951
dt = datetime(2016, 6, 6)
5052
with freeze_time(dt):
@@ -61,6 +63,7 @@ def test_change_plugin(self):
6163
def test_clear_placeholder(self):
6264
version = factories.PageVersionFactory()
6365
placeholder = factories.PlaceholderFactory(source=version.content)
66+
placeholder.page.get_absolute_url = lambda *args, **kwargs: "/test_page/" # Fake URL needed for URI
6467

6568
dt = datetime(2016, 6, 6)
6669
with freeze_time(dt):
@@ -81,6 +84,7 @@ def test_delete_plugin(self):
8184
plugin = add_plugin(
8285
placeholder, "PollPlugin", version.content.language, poll=poll
8386
)
87+
plugin.page.get_absolute_url = lambda *args, **kwargs: "/test_page/" # Fake URL needed for URI
8488

8589
dt = datetime(2016, 6, 6)
8690
with freeze_time(dt):
@@ -103,6 +107,7 @@ def test_add_plugins_from_placeholder(self):
103107
plugin = add_plugin(
104108
source_placeholder, "PollPlugin", version.content.language, poll=poll
105109
)
110+
plugin.page.get_absolute_url = lambda *args, **kwargs: "/test_page/" # Fake URL needed for URI
106111

107112
dt = datetime(2016, 6, 6)
108113
with freeze_time(dt):
@@ -165,7 +170,7 @@ def test_paste_plugin(self):
165170
plugin = add_plugin(
166171
source_placeholder, "PollPlugin", version.content.language, poll=poll
167172
)
168-
173+
plugin.page.get_absolute_url = lambda *args, **kwargs: "/test_page/"
169174
dt = datetime(2016, 6, 6)
170175
with freeze_time(dt):
171176
endpoint = self.get_move_plugin_uri(plugin)
@@ -197,6 +202,7 @@ def test_cut_plugin(self):
197202
plugin = add_plugin(
198203
placeholder, "PollPlugin", version.content.language, poll=poll
199204
)
205+
plugin.page.get_absolute_url = lambda *args, **kwargs: "/test_page/" # Fake URL needed for URI
200206

201207
dt = datetime(2016, 6, 6)
202208
with freeze_time(dt):
@@ -223,6 +229,7 @@ def test_move_plugin(self):
223229
plugin = add_plugin(
224230
source_placeholder, "PollPlugin", version.content.language, poll=poll
225231
)
232+
plugin.page.get_absolute_url = lambda *args, **kwargs: "/test_page/" # Fake URL needed for URI
226233

227234
dt = datetime(2016, 6, 6)
228235
with freeze_time(dt):

tests/test_locking.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,12 +394,12 @@ def test_edit_action_link_disabled_state(self):
394394
author_request.user = self.user_author
395395
otheruser_request = RequestFactory()
396396
otheruser_request.user = self.superuser
397-
expected_disabled_state = "inactive"
397+
expected_disabled_state = ""
398398

399399
actual_disabled_state = self.version_admin._get_edit_link(version, otheruser_request)
400400

401401
self.assertFalse(version.check_edit_redirect.as_bool(self.superuser))
402-
self.assertIn(expected_disabled_state, actual_disabled_state)
402+
self.assertEqual(expected_disabled_state, actual_disabled_state)
403403

404404

405405
@override_settings(DJANGOCMS_VERSIONING_LOCK_VERSIONS=True)

tests/test_toolbars.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,13 @@ def test_view_published_in_toolbar_in_edit_mode_for_published_page(self):
341341
are published
342342
"""
343343
published_version = PageVersionFactory(content__language="en", state=PUBLISHED)
344+
# Create URL
345+
PageUrlFactory(
346+
page=published_version.content.page,
347+
language=published_version.content.language,
348+
path=slugify("test_page"),
349+
slug=slugify("test_page"),
350+
)
344351
toolbar = get_toolbar(published_version.content, edit_mode=True)
345352

346353
toolbar.post_template_populate()
@@ -353,6 +360,13 @@ def test_view_published_in_toolbar_in_preview_mode_for_published_page(self):
353360
are published
354361
"""
355362
published_version = PageVersionFactory(content__language="en", state=PUBLISHED)
363+
# Create URL
364+
PageUrlFactory(
365+
page=published_version.content.page,
366+
language=published_version.content.language,
367+
path=slugify("test_page"),
368+
slug=slugify("test_page"),
369+
)
356370
toolbar = get_toolbar(published_version.content, preview_mode=True)
357371

358372
toolbar.post_template_populate()

0 commit comments

Comments
 (0)