8000 Fixed #6572 -- Added missing clear cache for menu when page moved (#6… · django-cms/django-cms@1191c96 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1191c96

Browse files
authored
Fixed #6572 -- Added missing clear cache for menu when page moved (#6590)
1 parent 41a8404 commit 1191c96

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

CHANGELOG.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
=== 3.6.0 (unreleased) ===
22

3+
* Fixed a bug where menu link is outdated when page moved.
34
* Removed the ``cms moderator`` command.
45
* Dropped Django < 1.11 support.
56
* Removed the translatable content get / set methods from ``CMSPlugin`` model.

cms/models/pagemodel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ def move_page(self, target_node, position='first-child'):
564564
self.publisher_public._update_title_path(language)
565565
self.mark_as_published(language)
566566
self.mark_descendants_as_published(language)
567-
self.clear_cache()
567+
self.clear_cache(menu=True)
568568
return self
569569

570570
def _copy_titles(self, target, language, published):

cms/tests/test_menu.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,40 @@ def test_show_new_draft_page_in_menu(self):
326326
self.assertEqual(CacheKey.objects.count(), 1)
327327
self.assertEqual(page.get_title(), nodes[-1].title)
328328

329+
def test_show_page_in_menu_after_move_page(self):
330+
"""
331+
Test checks if the menu cache is cleaned after move page.
332+
"""
333+
page = create_page('page to move', 'nav_playground.html', 'en', published=True)
334+
335+
request = self.get_request('/')
336+
renderer = menu_pool.get_renderer(request)
337+
renderer.draft_mode_active = True
338+
nodes_before = renderer.get_nodes()
339+
index_before = [i for i, s in enumerate(nodes_before) if s.title == page.get_title()]
340+
self.assertEqual(CacheKey.objects.count(), 1)
341+
342+
with self.login_user_context(self.get_superuser()):
343+
# Moves the page to the second position in the tree
344+
data = {'id': page.pk, 'position': 1}
345+
endpoint = self.get_admin_url(Page, 'move_page', page.pk)
346+
response = self.client.post(endpoint, data)
347+
self.assertEqual(response.status_code, 200)
348+
self.assertEqual(CacheKey.objects.count(), 0)
349+
350+
request = self.get_request('/')
351+
renderer = menu_pool.get_renderer(request)
352+
renderer.draft_mode_active = True
353+
nodes_after = renderer.get_nodes()
354+
index_after = [i for i, s in enumerate(nodes_after) if s.title == page.get_title()]
355+
356+
self.assertEqual(CacheKey.objects.count(), 1)
357+
self.assertNotEqual(
358+
index_before,
359+
index_after,
360+
'Index should not be the same after move page in navigation'
361+
)
362+
329363
def test_cms_menu_public_with_multiple_languages(self):
330364
for page in Page.objects.drafts():
331365
create_title(

0 commit comments

Comments
 (0)
0