084d2893e7
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.
283 lines
8.6 KiB
Plaintext
283 lines
8.6 KiB
Plaintext
=========================
|
|
Comment Review Workflow
|
|
=========================
|
|
|
|
This is a functional test for the comment review workflow.
|
|
|
|
We use zope.testbrowser to simulate browser interaction in order to show
|
|
how this works.
|
|
|
|
This test does not include test of the moderation control panel because it
|
|
heavly relies on Javascript (which zope.testbrowser can't test).
|
|
|
|
|
|
Setting up and logging in
|
|
-------------------------
|
|
|
|
First we have to set up some things and login.
|
|
|
|
>>> app = layer['app']
|
|
>>> from plone.testing.z2 import Browser
|
|
>>> browser = Browser(app)
|
|
>>> browser.handleErrors = False
|
|
>>> browser.addHeader('Authorization', 'Basic admin:secret')
|
|
>>> portal = layer['portal']
|
|
>>> portal_url = 'http://nohost/plone'
|
|
|
|
By default, only HTTP error codes (e.g. 500 Server Side Error) are shown when an
|
|
error occurs on the server. To see more details, set handleErrors to False:
|
|
|
|
>>> browser.handleErrors = False
|
|
|
|
We also keep another testbrowser handy for testing how tiles are rendered if
|
|
you're not logged in::
|
|
|
|
>>> unprivileged_browser = Browser(app)
|
|
>>> unprivileged_browser.handleErrors = False
|
|
|
|
Enable commenting.
|
|
|
|
>>> from zope.component import queryUtility
|
|
>>> from plone.registry.interfaces import IRegistry
|
|
>>> from plone.app.discussion.interfaces import IDiscussionSettings
|
|
>>> registry = queryUtility(IRegistry)
|
|
>>> settings = registry.forInterface(IDiscussionSettings)
|
|
>>> settings.globally_enabled = True
|
|
|
|
|
|
Enable comment review workflow
|
|
------------------------------
|
|
|
|
Enable the 'comment review workflow' for comments.
|
|
|
|
>>> portal.portal_workflow.setChainForPortalTypes(('Discussion Item',), ('comment_review_workflow'),)
|
|
>>> portal.portal_workflow.getChainForPortalType('Discussion Item')
|
|
('comment_review_workflow',)
|
|
|
|
We need to commit the transaction, otherwise setting the workflow will not work.
|
|
|
|
>>> import transaction
|
|
>>> transaction.commit()
|
|
|
|
Enable anonymous comments
|
|
|
|
>>> browser.open(portal_url+'/@@discussion-controlpanel')
|
|
>>> browser.getControl(name='form.widgets.anonymous_comments:list').value = True
|
|
>>> browser.getControl(name='form.buttons.save').click()
|
|
|
|
Create a public page with comments allowed.
|
|
|
|
>>> browser.open(portal_url)
|
|
>>> browser.getLink(id='document').click()
|
|
>>> browser.getControl(name='form.widgets.IDublinCore.title').value = "Doc"
|
|
>>> browser.getControl(name='form.widgets.IAllowDiscussion.allow_discussion:list').value = ['True']
|
|
>>> browser.getControl('Save').click()
|
|
>>> urldoc = browser.url
|
|
|
|
Check that the form has been properly submitted
|
|
|
|
>>> browser.url
|
|
'http://nohost/plone/doc/view'
|
|
|
|
Make sure the document is published:
|
|
|
|
>>> browser.getLink("Publish").click()
|
|
>>> 'Published' in browser.contents
|
|
True
|
|
|
|
Post some comments as anonymous user:
|
|
|
|
>>> unprivileged_browser.open(urldoc)
|
|
>>> unprivileged_browser.getControl(name='form.widgets.text').value = "First anonymous comment"
|
|
>>> unprivileged_browser.getControl(name='form.buttons.comment').click()
|
|
>>> unprivileged_browser.getControl(name='form.widgets.text').value = "Second anonymous comment"
|
|
>>> unprivileged_browser.getControl(name='form.buttons.comment').click()
|
|
|
|
Make sure the user gets a notification that the comment awaits moderator
|
|
approval.
|
|
|
|
>>> 'Your comment awaits moderator approval' in unprivileged_browser.contents
|
|
True
|
|
|
|
Administrators can see all posts and comment actions
|
|
|
|
>>> browser.open(urldoc)
|
|
|
|
>>> 'Moderate comments' in browser.contents
|
|
True
|
|
|
|
>>> 'First anonymous comment' in browser.contents
|
|
True
|
|
|
|
>>> 'form.button.DeleteComment' in browser.contents
|
|
True
|
|
|
|
>>> 'form.button.TransmitComment' in browser.contents
|
|
True
|
|
|
|
Anonymous user can not see any posts or comment actions
|
|
|
|
>>> unprivileged_browser.open(urldoc)
|
|
|
|
>>> 'Moderate comments' in unprivileged_browser.contents
|
|
False
|
|
|
|
>>> 'First anonymous comment' in unprivileged_browser.contents
|
|
False
|
|
|
|
>>> 'form.button.DeleteComment' in unprivileged_browser.contents
|
|
False
|
|
|
|
>>> 'form.button.TransmitComment' in unprivileged_browser.contents
|
|
False
|
|
|
|
The catalog does not list the comments yet:
|
|
|
|
>>> portal.portal_catalog.searchResults(id='doc', total_comments=0)
|
|
[<Products...]
|
|
|
|
Users with 'Review comment' permission can see unapproved comments and comment
|
|
actions.
|
|
|
|
>>> browser.open(portal_url + '/logout')
|
|
>>> browser.open(portal_url + '/login_form')
|
|
>>> browser.getControl(name='__ac_name').value = 'jack'
|
|
>>> browser.getControl(name='__ac_password').value = 'secret'
|
|
>>> browser.getControl('Log in').click()
|
|
|
|
>>> browser.open(urldoc)
|
|
|
|
>>> 'Moderate comments' in browser.contents
|
|
True
|
|
|
|
>>> 'First anonymous comment' in browser.contents
|
|
True
|
|
|
|
>>> 'form.button.DeleteComment' in browser.contents
|
|
True
|
|
|
|
>>> 'form.button.TransmitComment' in browser.contents
|
|
True
|
|
|
|
|
|
Publish a comment in the comments view
|
|
--------------------------------------
|
|
|
|
Publish the first anonymous comment in the main comments view. The publish call
|
|
on the comment currently raises an 404 error, because of a zope.testbrowser
|
|
flaw? Though, the comment is published properly.
|
|
|
|
>>> browser.open(urldoc)
|
|
>>> 'First anonymous comment' in unprivileged_browser.contents
|
|
False
|
|
|
|
>>> browser.open(urldoc)
|
|
>>> browser.handleErrors = True
|
|
>>> browser.raiseHttpErrors = False
|
|
>>> browser.getControl('Approve', index=0).click()
|
|
|
|
>>> 'Comment approved' in browser.contents
|
|
True
|
|
|
|
>>> browser.handleErrors = False
|
|
>>> browser.raiseHttpErrors = True
|
|
|
|
Make sure anonymous users see the approved comment, but not the unapproved ones.
|
|
|
|
>>> unprivileged_browser.open(urldoc)
|
|
>>> 'First anonymous comment' in unprivileged_browser.contents
|
|
True
|
|
|
|
Make sure the catalog only lists the public comments.
|
|
|
|
>>> portal.portal_catalog.searchResults(id='doc', total_comments=1)
|
|
[<Products...]
|
|
|
|
|
|
Delete a comment in the comments view
|
|
-------------------------------------
|
|
|
|
Delete the second anonymous comment in the main comments view. The delete call
|
|
on the comment currently raises an 404 error, because of a zope.testbrowser
|
|
flaw? Though, the comment is deleted properly.
|
|
|
|
>>> browser.open(urldoc)
|
|
>>> 'Second anonymous comment' in browser.contents
|
|
True
|
|
|
|
>>> browser.open(urldoc)
|
|
>>> browser.handleErrors = True
|
|
>>> browser.raiseHttpErrors = False
|
|
>>> browser.getControl('Delete', index=1).click()
|
|
|
|
>>> browser.handleErrors = False
|
|
>>> browser.raiseHttpErrors = True
|
|
|
|
>>> 'Comment deleted' in browser.contents
|
|
True
|
|
|
|
Make sure the second comment has been deleted.
|
|
|
|
>>> browser.open(urldoc)
|
|
>>> 'Second anonymous comment' in browser.contents
|
|
False
|
|
|
|
Delete the first, published comment.
|
|
>>> browser.open(urldoc)
|
|
>>> browser.getControl('Delete', index=0).click()
|
|
|
|
Make sure the catalog has been updated properly.
|
|
|
|
>>> portal.portal_catalog.searchResults(id='doc', total_comments=0)
|
|
[<Products...]
|
|
|
|
|
|
Moderation view
|
|
---------------
|
|
|
|
Enable anonymous comment with email.
|
|
|
|
>>> browser.open(portal_url + '/logout')
|
|
>>> browser.open(portal_url + '/login_form')
|
|
>>> browser.getControl(name='__ac_name').value = 'admin'
|
|
>>> browser.getControl(name='__ac_password').value = 'secret'
|
|
>>> browser.getControl('Log in').click()
|
|
>>> browser.open(portal_url+'/@@discussion-controlpanel')
|
|
>>> browser.getControl(name='form.widgets.anonymous_comments:list').value = 'selected'
|
|
>>> browser.getControl(name='form.widgets.anonymous_email_enabled:list').value = 'selected'
|
|
>>> browser.getControl(name='form.buttons.save').click()
|
|
>>> browser.open(portal_url + '/logout')
|
|
|
|
Now we can post an anonymous comment.
|
|
|
|
>>> unprivileged_browser.open(urldoc)
|
|
>>> unprivileged_browser.getControl(name='form.widgets.text').value = "This is an anonymous comment"
|
|
>>> unprivileged_browser.getControl(name='form.widgets.author_name').value = u'John'
|
|
>>> unprivileged_browser.getControl(name='form.widgets.author_email').value = 'john@acme.com'
|
|
>>> unprivileged_browser.getControl(name='form.buttons.comment').click()
|
|
|
|
|
|
Check that the form has been properly submitted.
|
|
|
|
>>> unprivileged_browser.url
|
|
'http://nohost/plone/doc/document_view'
|
|
|
|
>>> 'Your comment awaits moderator approval.' in unprivileged_browser.contents
|
|
True
|
|
|
|
Change to Moderation view.
|
|
|
|
>>> browser.open(urldoc)
|
|
>>> browser.getLink("Moderate comments").click()
|
|
|
|
The new comment is shown in moderation view with authors name and email.
|
|
|
|
>>> browser.url
|
|
'http://nohost/plone/@@moderate-comments'
|
|
|
|
>>> 'John' in browser.contents
|
|
True
|
|
|
|
>>> 'john@acme.com' in browser.contents
|
|
True
|