dynamicweb/cms/tests/test_signals.py

111 lines
4.8 KiB
Python

import warnings
from django.conf import settings
from django.test.utils import override_settings
from cms.api import create_page
from cms.models import Page, UrlconfRevision
from cms.signals import move_page, urls_need_reloading
from cms.test_utils.project.sampleapp.cms_apps import SampleApp
from cms.test_utils.testcases import CMSTestCase
from cms.test_utils.util.context_managers import apphooks, signal_tester
from cms.utils.compat.warnings import RemovedInDjangoCMS60Warning
overrides = {
'MIDDLEWARE': ['cms.middleware.utils.ApphookReloadMiddleware'] + settings.MIDDLEWARE,
'CMS_PERMISSION': False,
}
@override_settings(**overrides)
class SignalTests(CMSTestCase):
def test_move_page_signal_warns_on_connect(self):
def receiver(**kwargs):
return None
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter("always", RemovedInDjangoCMS60Warning)
move_page.connect(receiver)
self.assertTrue(
any(issubclass(warning.category, RemovedInDjangoCMS60Warning) for warning in caught),
"Expected deprecation warning when connecting to move_page signal.",
)
def test_urls_need_reloading_signal_set_apphook(self):
superuser = self.get_superuser()
with apphooks(SampleApp):
with self.login_user_context(superuser):
with signal_tester(urls_need_reloading) as env:
self.assertEqual(env.call_count, 0)
cms_page = create_page(
"apphooked-page",
"nav_playground.html",
"en",
)
redirect_to = self.get_pages_admin_list_uri(site_id=cms_page.site_id)
endpoint = self.get_admin_url(Page, 'advanced', cms_page.pk)
current_revision, _ = UrlconfRevision.get_or_create_revision()
page_data = {
"reverse_id": "",
"navigation_extenders": "",
"application_urls": "SampleApp",
"application_namespace": "sampleapp",
}
response = self.client.post(endpoint, page_data)
self.assertRedirects(response, redirect_to)
self.assertEqual(env.call_count, 1)
new_revision, _ = UrlconfRevision.get_or_create_revision()
self.assertNotEqual(current_revision, new_revision)
def test_urls_need_reloading_signal_delete(self):
superuser = self.get_superuser()
with apphooks(SampleApp):
with self.login_user_context(superuser):
page = create_page(
"apphooked-page",
"nav_playground.html",
"en",
apphook="SampleApp",
apphook_namespace="test"
)
with signal_tester(urls_need_reloading) as env:
endpoint = self.get_admin_url(Page, 'delete', page.pk)
current_revision, _ = UrlconfRevision.get_or_create_revision()
self.assertEqual(env.call_count, 0)
self.client.post(endpoint, {'post': 'yes'})
self.assertEqual(env.call_count, 1)
new_revision, _ = UrlconfRevision.get_or_create_revision()
self.assertNotEqual(current_revision, new_revision)
def test_urls_need_reloading_signal_change_slug(self):
superuser = self.get_superuser()
redirect_to = self.get_pages_admin_list_uri()
with apphooks(SampleApp):
with self.login_user_context(superuser):
with signal_tester(urls_need_reloading) as env:
current_revision, _ = UrlconfRevision.get_or_create_revision()
self.assertEqual(env.call_count, 0)
page = create_page(
"apphooked-page",
"nav_playground.html",
"en",
apphook="SampleApp",
apphook_namespace="test"
)
# Change slug should trigger the signal
endpoint = self.get_page_change_uri('en', page)
page_data = {
'title': 'apphooked-page',
'slug': 'apphooked-page-2',
'template': 'nav_playground.html'
}
response = self.client.post(endpoint, page_data)
self.assertRedirects(response, redirect_to)
self.assertEqual(env.call_count, 1)
new_revision, _ = UrlconfRevision.get_or_create_revision()
self.assertNotEqual(current_revision, new_revision)