plone.app.discussion/plone/app/discussion/tests/functional_test_comment_rev...

209 lines
6.3 KiB
Plaintext
Raw Normal View History

=========================
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)
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='title').value = "Doc"
>>> browser.getControl(name='allowDiscussion:boolean').value = True
>>> browser.getControl(name='form.button.save').click()
>>> urldoc = browser.url
Check that the form has been properly submitted
>>> browser.url
'http://nohost/plone/doc'
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
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
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