From f9a0ae277e5cca2fb61b3eb31645071c8c56ee1c Mon Sep 17 00:00:00 2001 From: Iacopo Spalletti Date: Sat, 3 Aug 2019 06:24:28 +0200 Subject: [PATCH] Empty menu cache when deleting blogconfig instances --- djangocms_blog/cms_menus.py | 1 + tests/test_menu.py | 59 +++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/djangocms_blog/cms_menus.py b/djangocms_blog/cms_menus.py index 5e338093..6be050a9 100644 --- a/djangocms_blog/cms_menus.py +++ b/djangocms_blog/cms_menus.py @@ -191,3 +191,4 @@ def clear_menu_cache(**kwargs): post_save.connect(clear_menu_cache, sender=BlogCategory) post_delete.connect(clear_menu_cache, sender=BlogCategory) +post_delete.connect(clear_menu_cache, sender=BlogConfig) diff --git a/tests/test_menu.py b/tests/test_menu.py index 1252f230..76b137f5 100644 --- a/tests/test_menu.py +++ b/tests/test_menu.py @@ -6,6 +6,7 @@ from menus.menu_pool import menu_pool from parler.utils.context import smart_override, switch_language +from djangocms_blog.cms_appconfig import BlogConfig from djangocms_blog.models import BlogCategory from djangocms_blog.settings import ( MENU_TYPE_CATEGORIES, MENU_TYPE_COMPLETE, MENU_TYPE_NONE, MENU_TYPE_POSTS, @@ -30,6 +31,64 @@ def setUp(self): activate('en') self._reload_menus() + def test_menu_cache_clear_blogconfig(self): + """ + Tests if menu cache is cleared after config deletion + """ + + from menus.models import CacheKey + from django.core.cache import cache + pages = self.get_pages() + self.get_posts() + self.reload_urlconf() + + app_config_test = BlogConfig.objects.create(namespace='test_config') + app_config_test.app_title = 'appx' + app_config_test.object_name = 'Blogx' + app_config_test.save() + lang = 'en' + with smart_override(lang): + self._reset_menus() + request = self.get_page_request(pages[1], self.user, pages[1].get_absolute_url(lang), edit=True) + self.get_nodes(menu_pool, request) + keys = CacheKey.objects.get_keys().distinct().values_list('key', flat=True) + self.assertTrue(cache.get_many(keys)) + app_config_test.delete() + self.assertFalse(cache.get_many(keys)) + + def test_menu_cache_clear_category(self): + """ + Tests if menu cache is cleared after category deletion + """ + + from menus.models import CacheKey + from django.core.cache import cache + pages = self.get_pages() + self.get_posts() + self.reload_urlconf() + + lang = 'en' + with smart_override(lang): + self._reset_menus() + request = self.get_page_request(pages[1], self.user, pages[1].get_absolute_url(lang), edit=True) + self.get_nodes(menu_pool, request) + keys = CacheKey.objects.get_keys().distinct().values_list('key', flat=True) + self.assertTrue(cache.get_many(keys)) + category_test = BlogCategory.objects.create( + name='category test', app_config=self.app_config_1 + ) + category_test.set_current_language('it', initialize=True) + category_test.name = 'categoria test' + category_test.save() + self.assertFalse(cache.get_many(keys)) + self.get_nodes(menu_pool, request) + keys = CacheKey.objects.get_keys().distinct().values_list('key', flat=True) + self.assertTrue(cache.get_many(keys)) + category_test.delete() + self.assertFalse(cache.get_many(keys)) + keys = CacheKey.objects.get_keys().distinct().values_list('key', flat=True) + self.assertFalse(keys) + def test_menu_nodes(self): """ Tests if all categories are present in the menu