Functional test for comment_review_workflow added; existing fonctional test renamed to functional_test_comments.txt;
svn path=/plone.app.discussion/trunk/; revision=40532
This commit is contained in:
		
							parent
							
								
									1db321a044
								
							
						
					
					
						commit
						1230e67a01
					
				@ -0,0 +1,205 @@
 | 
				
			|||||||
 | 
					=========================
 | 
				
			||||||
 | 
					 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 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()
 | 
				
			||||||
 | 
					    Traceback (most recent call last):
 | 
				
			||||||
 | 
					    ...
 | 
				
			||||||
 | 
					    HTTPError: HTTP Error 404: Not Found
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> '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()
 | 
				
			||||||
 | 
					    Traceback (most recent call last):
 | 
				
			||||||
 | 
					    ...
 | 
				
			||||||
 | 
					    HTTPError: HTTP Error 404: Not Found
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					           
 | 
				
			||||||
							
								
								
									
										267
									
								
								plone/app/discussion/tests/functional_test_comments.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										267
									
								
								plone/app/discussion/tests/functional_test_comments.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,267 @@
 | 
				
			|||||||
 | 
					======================
 | 
				
			||||||
 | 
					 plone.app.discussion
 | 
				
			||||||
 | 
					======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is a functional test for the plone.app.discussion comments viewlet. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We use zope.testbrowser to simulate browser interaction in order to show how
 | 
				
			||||||
 | 
					the plone.app.discussion commenting works.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					Add a test user
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    >>> from Products.CMFCore.utils import getToolByName
 | 
				
			||||||
 | 
					    >>> mtool = getToolByName(portal, 'portal_membership', None) 
 | 
				
			||||||
 | 
					    >>> mtool.addMember('jim', 'Jim', ['Member'], []) 
 | 
				
			||||||
 | 
					    >>> mtool.getMemberById('jim').setMemberProperties({"fullname": 'Jim Fulton'}) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Create a public page with comments allowed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> browser.open(portal_url)
 | 
				
			||||||
 | 
					    >>> browser.getLink(id='document').click()
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='title').value = "Doc1"
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='allowDiscussion:boolean').value = True
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.button.save').click()
 | 
				
			||||||
 | 
					    >>> urldoc1 = browser.url
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					Check that the form has been properly submitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> browser.url
 | 
				
			||||||
 | 
					    'http://nohost/plone/doc1'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Comment Viewlet
 | 
				
			||||||
 | 
					---------------
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					Check that the old comments viewlet does not show up
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 'discussion_reply_form' in browser.contents
 | 
				
			||||||
 | 
					    False
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					Check that the comment form/viewlet shows up
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> 'formfield-form-widgets-in_reply_to' in browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 'formfield-form-widgets-text' in browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Post a comment as admin
 | 
				
			||||||
 | 
					-----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Login as admin.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> from plone.app.testing import setRoles
 | 
				
			||||||
 | 
					    >>> from plone.app.testing import TEST_USER_NAME
 | 
				
			||||||
 | 
					    >>> setRoles(portal, TEST_USER_NAME, ['Manager'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Post a comment as admin.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.widgets.text').value = "Comment from admin" 
 | 
				
			||||||
 | 
					    >>> submit = browser.getControl(name='form.buttons.comment')
 | 
				
			||||||
 | 
					    >>> submit.click() 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Check if comment has been added properly.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> '<a href="http://nohost/plone/author/admin">admin</a>' in browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> browser.contents
 | 
				
			||||||
 | 
					    '...<a href="http://nohost/plone/author/admin">admin</a>...says:...'
 | 
				
			||||||
 | 
					     
 | 
				
			||||||
 | 
					    >>> "Comment from admin" in browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Post a comment as user
 | 
				
			||||||
 | 
					----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Login as user 'jim'. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> browser.open(portal_url + '/logout')
 | 
				
			||||||
 | 
					    >>> browser.open(portal_url + '/login_form')
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='__ac_name').value = 'jim'
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='__ac_password').value = 'secret'
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='submit').click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Post a comment as user jim.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> browser.open(urldoc1)
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.widgets.text').value = "Comment from Jim" 
 | 
				
			||||||
 | 
					    >>> submit = browser.getControl(name='form.buttons.comment')
 | 
				
			||||||
 | 
					    >>> submit.click() 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Check if the comment has been added properly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> browser.contents
 | 
				
			||||||
 | 
					    '...<a href="http://nohost/plone/author/jim">Jim Fulton</a>...says:...'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> "Comment from Jim" in browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Post a comment as anonymous user
 | 
				
			||||||
 | 
					--------------------------------
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					Login and post comment as Anonymous 
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.open(urldoc1)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 'Log in to add comments' in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Enable anonymous comment 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> 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(name='submit').click()
 | 
				
			||||||
 | 
					    >>> browser.open(portal_url+'/@@discussion-settings') 
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.widgets.anonymous_comments:list').value = [True] 
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.buttons.save').click() 
 | 
				
			||||||
 | 
					    >>> browser.open(portal_url + '/logout')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Now we can post an anonymous comment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.open(urldoc1)
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.getControl(name='form.widgets.text').value = "This is an anonymous comment"
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.getControl(name='form.buttons.comment').click()
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    >>> '<span>Anonymous</span>' in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 'says' in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 'This is an anonymous comment' in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Make sure special characters work as well.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.open(urldoc1)
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.getControl(name='form.widgets.author_name').value = "Tarek Ziadé"
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.getControl(name='form.widgets.text').value = "This is an äüö comment"
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.getControl(name='form.buttons.comment').click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> 'Tarek Ziadé' in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 'says' in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 'This is an äüö comment' in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Reply to an existing comment
 | 
				
			||||||
 | 
					----------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Check that there is no existing direct reply to a comment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> 'replyTreeLevel1' in browser.contents
 | 
				
			||||||
 | 
					    False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Find a comment id to reply to.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> browser.open(urldoc1)
 | 
				
			||||||
 | 
					    >>> import re
 | 
				
			||||||
 | 
					    >>> comment_div = re.findall('<div.*?.class="comment.*?>', browser.contents)[0]
 | 
				
			||||||
 | 
					    >>> id = re.findall('"([^"]*)"', comment_div)[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Post a reply to an existing comment.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.widgets.in_reply_to').value = id
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.widgets.text').value = "Reply comment"
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.buttons.comment').click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Check that the reply has been posted properly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> 'Reply comment' in browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    >>> 'replyTreeLevel1' in browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Post a comment with comment review workflow enabled
 | 
				
			||||||
 | 
					---------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Post comment as anonymous user.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.open(urldoc1)
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.getControl(name='form.widgets.text').value = "Comment review workflow comment"
 | 
				
			||||||
 | 
					    >>> unprivileged_browser.getControl(name='form.buttons.comment').click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Make sure the comment has not been published.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> 'Comment review workflow comment' not in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Make sure the user gets a notification that the comment awaits moderator 
 | 
				
			||||||
 | 
					approval.    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> 'Your comment awaits moderator approval' in unprivileged_browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Regression Test
 | 
				
			||||||
 | 
					---------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Make sure we still can edit the content object after a comment has been posted.
 | 
				
			||||||
 | 
					This is a regression test for http://dev.plone.org/plone/ticket/11157 
 | 
				
			||||||
 | 
					(TypeError: Can't pickle objects in acquisition wrappers).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Login as admin.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> 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(name='submit').click()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					Edit the content object.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    >>> browser.open(urldoc1 + "/edit")
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='text').value = "Lorem ipsum"
 | 
				
			||||||
 | 
					    >>> browser.getControl(name='form.button.save').click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Make sure the edit was successful.
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    >>> 'Lorem ipsum' in browser.contents
 | 
				
			||||||
 | 
					    True
 | 
				
			||||||
@ -10,7 +10,8 @@ from plone.app.discussion.testing import \
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
optionflags = (doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_ONLY_FIRST_FAILURE)
 | 
					optionflags = (doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE | doctest.REPORT_ONLY_FIRST_FAILURE)
 | 
				
			||||||
normal_testfiles = [
 | 
					normal_testfiles = [
 | 
				
			||||||
    'functional.txt',
 | 
					    'functional_test_comments.txt',
 | 
				
			||||||
 | 
					    'functional_test_comment_review_workflow.txt'
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_suite():
 | 
					def test_suite():
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user