plone.app.discussion/plone/app/discussion/tests/test_controlpanel.py

232 lines
7.9 KiB
Python

from plone.app.discussion.interfaces import IDiscussionSettings
from plone.app.discussion.testing import ( # noqa
PLONE_APP_DISCUSSION_INTEGRATION_TESTING,
)
from plone.app.testing import setRoles
from plone.app.testing import TEST_USER_ID
from plone.registry import Registry
from plone.registry.interfaces import IRegistry
from Products.CMFCore.utils import getToolByName
from zope.component import getMultiAdapter
from zope.component import queryUtility
import unittest
class RegistryTest(unittest.TestCase):
layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING
def setUp(self):
self.portal = self.layer["portal"]
setRoles(self.portal, TEST_USER_ID, ["Manager"])
self.registry = Registry()
self.registry.registerInterface(IDiscussionSettings)
def test_registry_registered(self):
registry = queryUtility(IRegistry)
self.assertTrue(registry.forInterface(IDiscussionSettings))
def test_discussion_controlpanel_view(self):
view = getMultiAdapter(
(self.portal, self.portal.REQUEST),
name="discussion-controlpanel",
)
self.assertTrue(view())
def test_discussion_in_controlpanel(self):
# Check if discussion is in the control panel
self.controlpanel = getToolByName(self.portal, "portal_controlpanel")
self.assertTrue(
"discussion"
in [a.getAction(self)["id"] for a in self.controlpanel.listActions()],
)
def test_globally_enabled(self):
# Check globally_enabled record
self.assertTrue("globally_enabled" in IDiscussionSettings)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces."
+ "IDiscussionSettings.globally_enabled"
],
False,
)
def test_anonymous_comments(self):
# Check anonymous_comments record
self.assertTrue("anonymous_comments" in IDiscussionSettings)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces."
+ "IDiscussionSettings.anonymous_comments"
],
False,
)
def test_moderation_enabled(self):
# Check globally_enabled record
self.assertTrue("moderation_enabled" in IDiscussionSettings)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces."
+ "IDiscussionSettings.moderation_enabled"
],
False,
)
def test_edit_comment_enabled(self):
# Check edit_comment_enabled record
self.assertTrue("edit_comment_enabled" in IDiscussionSettings)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces."
+ "IDiscussionSettings.edit_comment_enabled"
],
False,
)
def test_delete_own_comment_enabled(self):
# Check delete_own_comment_enabled record
self.assertTrue("delete_own_comment_enabled" in IDiscussionSettings)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces."
+ "IDiscussionSettings.delete_own_comment_enabled"
],
False,
)
def test_text_transform(self):
self.assertTrue("text_transform" in IDiscussionSettings)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces."
+ "IDiscussionSettings.text_transform"
],
"text/plain",
)
def test_captcha(self):
# Check globally_enabled record
self.assertTrue("captcha" in IDiscussionSettings)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces." + "IDiscussionSettings.captcha"
],
"disabled",
)
def test_show_commenter_image(self):
# Check show_commenter_image record
self.assertTrue("show_commenter_image" in IDiscussionSettings)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces."
+ "IDiscussionSettings.show_commenter_image"
],
True,
)
def test_moderator_notification_enabled(self):
# Check show_commenter_image record
self.assertTrue(
"moderator_notification_enabled" in IDiscussionSettings,
)
self.assertEqual(
self.registry[
"plone.app.discussion.interfaces."
+ "IDiscussionSettings.moderator_notification_enabled"
],
False,
)
# def test_user_notification_enabled(self):
# # Check show_commenter_image record
# show_commenter_image = self.registry.records['plone.app.discussion.' +
# 'interfaces.IDiscussionSettings.user_notification_enabled']
#
# self.assertTrue('user_notification_enabled' in IDiscussionSettings)
# self.assertEqual(self.registry['plone.app.discussion.interfaces.' +
# 'IDiscussionSettings.user_notification_enabled'], False)
class ConfigurationChangedSubscriberTest(unittest.TestCase):
layer = PLONE_APP_DISCUSSION_INTEGRATION_TESTING
def setUp(self):
self.portal = self.layer["portal"]
setRoles(self.portal, TEST_USER_ID, ["Manager"])
registry = queryUtility(IRegistry)
self.settings = registry.forInterface(IDiscussionSettings, check=False)
def test_moderation_enabled_in_discussion_control_panel_changed(self):
"""Make sure the 'Discussion Item' workflow is changed properly, when
the 'comment_moderation' setting in the discussion control panel
changes.
"""
# By default the comment_one_state_workflow without moderation is
# enabled
self.assertEqual(
("comment_one_state_workflow",),
self.portal.portal_workflow.getChainForPortalType(
"Discussion Item",
),
)
# Enable moderation in the discussion control panel
self.settings.moderation_enabled = True
# Make sure the comment_review_workflow with moderation enabled is
# enabled
self.assertEqual(
("comment_review_workflow",),
self.portal.portal_workflow.getChainForPortalType(
"Discussion Item",
),
)
# And back
self.settings.moderation_enabled = False
self.assertEqual(
("comment_one_state_workflow",),
self.portal.portal_workflow.getChainForPortalType(
"Discussion Item",
),
)
def test_change_workflow_in_types_control_panel(self):
"""Make sure the setting in the discussion control panel is changed
accordingly, when the workflow for the 'Discussion Item' changed in
the types control panel.
"""
# By default, moderation is disabled
self.settings.moderation_enabled = False
# Enable the 'comment_review_workflow' with moderation enabled
self.portal.portal_workflow.setChainForPortalTypes(
("Discussion Item",),
("comment_review_workflow",),
)
# Make sure the moderation_enabled settings has changed
self.settings.moderation_enabled = True
# Enable the 'comment_review_workflow' with moderation enabled
self.portal.portal_workflow.setChainForPortalTypes(
("Discussion Item",),
("comment_one_state_workflow",),
)
self.settings.moderation_enabled = True
# Enable a 'custom' discussion workflow
self.portal.portal_workflow.setChainForPortalTypes(
("Discussion Item",),
("intranet_workflow",),
)
# Setting has not changed. A Custom workflow disables the
# enable_moderation checkbox in the discussion control panel. The
# setting itself remains unchanged.
self.settings.moderation_enabled = True