233 lines
6.9 KiB
Plaintext
233 lines
6.9 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-settings')
|
|
>>> 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.PublishComment' 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.PublishComment' 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(name='submit').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.PublishComment' 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 anonyous 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...]
|