Additional (optional) workflow: "Comment Multiple State Review Workflow"

Moderator is not forced to delete a comment or to let it pending:
Workflow has two more states "rejected" and "spam" to existing review workflow.
Moderation view extended showing all states. Filter by state.
This commit is contained in:
Katja Suess
2019-12-05 21:55:23 +01:00
parent f7b8335d27
commit 084d2893e7
17 changed files with 684 additions and 534 deletions
@@ -112,7 +112,7 @@ Administrators can see all posts and comment actions
>>> 'form.button.DeleteComment' in browser.contents
True
>>> 'form.button.PublishComment' in browser.contents
>>> 'form.button.TransmitComment' in browser.contents
True
Anonymous user can not see any posts or comment actions
@@ -128,7 +128,7 @@ Anonymous user can not see any posts or comment actions
>>> 'form.button.DeleteComment' in unprivileged_browser.contents
False
>>> 'form.button.PublishComment' in unprivileged_browser.contents
>>> 'form.button.TransmitComment' in unprivileged_browser.contents
False
The catalog does not list the comments yet:
@@ -156,7 +156,7 @@ actions.
>>> 'form.button.DeleteComment' in browser.contents
True
>>> 'form.button.PublishComment' in browser.contents
>>> 'form.button.TransmitComment' in browser.contents
True
@@ -326,19 +326,19 @@ Deleting existing comments | 'Delete comments' permission
Anonymous cannot delete comments
>>> unprivileged_browser.open(urldoc1)
>>> 'form.button.Delete' in unprivileged_browser.contents
>>> 'form.button.DeleteComment' in unprivileged_browser.contents
False
A member cannot delete his own comments if he can't review or he isn't a Site Administrator
>>> browser_member.open(urldoc1)
>>> 'form.button.Delete' in browser_member.contents
>>> 'form.button.DeleteComment' in browser_member.contents
False
Admin can delete comments
>>> browser.open(urldoc1)
>>> 'form.button.Delete' in browser.contents
>>> 'form.button.DeleteComment' in browser.contents
True
Extract the delete comment url from the first "delete comment" button
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from plone.app.discussion.browser.moderation import BulkActionsView
from plone.app.discussion.browser.moderation import DeleteComment
from plone.app.discussion.browser.moderation import PublishComment
from plone.app.discussion.browser.moderation import CommentTransition
from plone.app.discussion.browser.moderation import View
from plone.app.discussion.interfaces import IConversation
from plone.app.discussion.interfaces import IDiscussionSettings
@@ -195,14 +195,14 @@ class RedirectionTest(unittest.TestCase):
def test_regression(self):
page_url = self.page.absolute_url()
self.request['HTTP_REFERER'] = page_url
for Klass in (DeleteComment, PublishComment):
for Klass in (DeleteComment, CommentTransition):
view = Klass(self.comment, self.request)
view.__parent__ = self.comment
self.assertEqual(page_url, view())
def test_valid_next_url(self):
self.request['HTTP_REFERER'] = 'http://attacker.com'
for Klass in (DeleteComment, PublishComment):
for Klass in (DeleteComment, CommentTransition):
view = Klass(self.comment, self.request)
view.__parent__ = self.comment
self.assertNotEqual('http://attacker.com', view())
+2 -2
View File
@@ -272,7 +272,7 @@ class CommentReviewWorkflowTest(unittest.TestCase):
'review_state',
),
)
view = self.comment.restrictedTraverse('@@moderate-publish-comment')
view = self.comment.restrictedTraverse('@@transmit-comment')
view()
self.assertEqual(
'published',
@@ -295,7 +295,7 @@ class CommentReviewWorkflowTest(unittest.TestCase):
self.assertRaises(
Unauthorized,
self.comment.restrictedTraverse,
'@@moderate-publish-comment',
'@@transmit-comment',
)
self.assertEqual(
'pending',