root/qPloneComments/trunk/tests/testQPloneCommentsConfiglet.py

Revision 1126 (checked in by deo, 7 months ago)

Modernized tests. Untabify.

  • Property svn:eol-style set to native
Line 
1 #
2 # Test configuration form working
3 #
4
5 from Products.PloneTestCase import PloneTestCase
6 from Products.CMFCore.utils import getToolByName
7 from Products.CMFCore.permissions import ReplyToItem
8 from AccessControl.SecurityManagement import noSecurityManager
9
10 PRODUCT = 'qPloneComments'
11 PROPERTY_SHEET = "qPloneComments"
12
13 USERS = {# Common Members
14          'admin':{'passw': 'secret_admin', 'roles': ['Manager']},
15          'owner':{'passw': 'secret_owner', 'roles': ['Owner']},
16          'member':{'passw': 'secret_member', 'roles': ['Member']},
17          'reviewer':{'passw': 'secret_reviewer', 'roles': ['Reviewer']},
18          # Members for discussion manager group
19          'dm_admin':{'passw': 'secret_dm_admin', 'roles': ['Manager']},
20          'dm_owner':{'passw': 'secret_dm_owner', 'roles': ['Owner']},
21          'dm_member':{'passw': 'secret_dm_member', 'roles': ['Member']},
22          'dm_reviewer':{'passw': 'secret_dm_reviewer', 'roles': ['Reviewer']},
23         }
24 COMMON_USERS_IDS = [u for u in USERS.keys() if not u.startswith('dm_')]
25 COMMON_USERS_IDS.append('anonym')
26 DM_USERS_IDS = [u for u in USERS.keys() if u.startswith('dm_')]
27
28 PloneTestCase.installProduct(PRODUCT)
29 PloneTestCase.setupPloneSite()
30
31 def addUsers(self):
32     self.loginAsPortalOwner()
33     # Add all users
34     self.membership = getToolByName(self.portal, 'portal_membership', None)
35     for user_id in USERS.keys():
36         self.membership.addMember(user_id, USERS[user_id]['passw'] , USERS[user_id]['roles'], [])
37
38     # Add users to Discussion Manager group
39     portal_groups = getToolByName(self.portal, 'portal_groups')
40     dm_group = portal_groups.getGroupById('DiscussionManager')
41     dm_users = [dm_group.addMember(u) for u in DM_USERS_IDS]
42
43
44 class TestConfiglet(PloneTestCase.FunctionalTestCase):
45
46     def afterSetUp(self):
47         self.loginAsPortalOwner()
48
49         self.qi = self.portal.portal_quickinstaller
50         self.qi.installProduct(PRODUCT)
51         # VERY IMPORTANT to guarantee product skin's content visibility
52         self._refreshSkinData()
53
54         '''Preparation for functional testing'''
55         # Allow discussion for Document
56         portal_types = getToolByName(self.portal, 'portal_types', None)
57         doc_fti = portal_types.getTypeInfo('Document')
58         doc_fti._updateProperty('allow_discussion', 1)
59
60         # Make sure Documents are visible by default
61         # XXX only do this for plone 3
62         self.portal.portal_workflow.setChainForPortalTypes(('Document',), 'plone_workflow')
63
64         portal_properties = getToolByName(self.portal, 'portal_properties', None)
65         self.prefs = portal_properties[PROPERTY_SHEET]
66         self.request = self.app.REQUEST
67
68         # Add Manager user - 'dm' and add him to Discussion Manager group
69         self.portal.portal_membership.addMember('dm', 'secret' , ['Manager'], [])
70         portal_groups = getToolByName(self.portal, 'portal_groups')
71         dm_group = portal_groups.getGroupById('DiscussionManager')
72         dm_group.addMember('dm')
73         #self.logout()
74         self.login('dm')
75         # For prepare mail sending - enter an e-mail adress
76         self.prefs._updateProperty('email_discussion_manager', 'discussion.manager@test.com')
77         member = self.portal.portal_membership.getAuthenticatedMember()
78         member.setMemberProperties({'email':'creator@test.com'})
79         #self.fail(member.getMemberId()+' :: '+member.getUserName()+' :: '+str(member.getRoles())+' :: '+member.getProperty('email'))
80
81         # Add testing document to portal
82         my_doc = self.portal.invokeFactory('Document', id='my_doc')
83         self.my_doc = self.portal['my_doc']
84         self.my_doc.edit(text_format='plain', text='hello world')
85
86     def testAnonymousCommenting(self):
87         getPortalReplyPerm = self.portal.rolesOfPermission
88         def getReplyRoles():
89             return [r['name'] for r in getPortalReplyPerm(ReplyToItem) if r['selected']=='SELECTED']
90         # Simulate switching ON Anonymous Commenting
91         self.request.form['enable_anonymous_commenting'] = 'True'
92         self.portal.prefs_comments_setup()
93         actual_reply_permission = getReplyRoles()
94         self.assert_('Anonymous' in actual_reply_permission, \
95                      "'Reply to Item' permission set for %s. 'Anonymous' role NOT added" %  actual_reply_permission)
96         # Simulate switching OFF Anonymous Commenting
97         if self.request.form.has_key('enable_anonymous_commenting'):
98            del self.request.form['enable_anonymous_commenting']
99         self.portal.prefs_comments_setup()
100         actual_reply_permission = getReplyRoles()
101         self.assert_(not 'Anonymous' in actual_reply_permission, \
102                      "'Reply to Item' permission set for %s. 'Anonymous' role NOT erased" %  actual_reply_permission)
103
104     def testSwitchONModeration(self):
105         addUsers(self)
106         self.discussion = self.portal.portal_discussion
107         self.request.form['enable_anonymous_commenting'] = 'True'
108         self.request.form['enable_moderation'] = 'True'
109         self.portal.prefs_comments_setup()
110         # Create talkback for document and Add comment to my_doc
111         self.discussion.getDiscussionFor(self.my_doc)
112         self.my_doc.discussion_reply('Reply 1','text of reply')
113         # Check moderating discussion
114         # MUST ALLOW for: members of 'DiscussionMnagers' group
115         # MUST REFUSE for: NOT members of 'DiscussionMnagers' group
116         getReplies = self.discussion.getDiscussionFor(self.my_doc).getReplies
117         for u in DM_USERS_IDS:
118             self.logout()
119             self.login(u)
120             self.assert_(getReplies(), "None discussion item added or discussion forbiden for %s user" % u)
121         for u in COMMON_USERS_IDS:
122             self.logout()
123             if not u=='anonym':
124                 self.login(u)
125             noSecurityManager()
126             self.assert_(not getReplies(), "Viewing discussion item allow for Anonymous user")
127
128     def testSwitchOFFModeration(self):
129         addUsers(self)
130         self.discussion = self.portal.portal_discussion
131         self.request.form['enable_anonymous_commenting'] = 'True'
132         self.portal.prefs_comments_setup()
133         # Create talkback for document and Add comment to my_doc
134         self.discussion.getDiscussionFor(self.my_doc)
135         self.request.form['Creator'] = self.portal.portal_membership.getAuthenticatedMember().getUserName()
136         self.request.form['subject'] = "Reply 1"
137         self.request.form['body_text'] = "text of reply"
138         self.my_doc.discussion_reply('Reply 1','text of reply')
139         # Check moderating discussion
140         # MUST ALLOW for: user with any role or Anonym
141         all_users_ids = DM_USERS_IDS + COMMON_USERS_IDS
142         for u in all_users_ids:
143             self.logout()
144             if not u=='anonym':
145                 self.login(u)
146             replies = self.discussion.getDiscussionFor(self.my_doc).getReplies()
147             self.assert_(replies, "No discussion item added or discussion forbidden for %s user" % u)
148
149     def testApproveNotification(self):
150         # Check ON Notification Anonymous Commenting
151         self.request.form['enable_approve_notification'] = 'True'
152         self.portal.prefs_comments_setup()
153         self.assert_(self.prefs.getProperty('enable_approve_notification')==1,"Approve Notification not terned ON")
154
155         # Check OFF Notification Anonymous Commenting
156         if self.request.form.has_key('enable_approve_notification'):
157            del self.request.form['enable_approve_notification']
158         self.portal.prefs_comments_setup()
159         self.assert_(self.prefs.getProperty('enable_approve_notification')==0,"Approve Notification not terned OFF")
160
161     def testPublishedNotification(self):
162         # Check ON Notification Anonymous Commenting
163         self.request.form['enable_published_notification'] = 'True'
164         self.portal.prefs_comments_setup()
165         self.assert_(self.prefs.getProperty('enable_published_notification')==1,"Published Notification not terned ON")
166
167         # Check OFF Notification Anonymous Commenting
168         if self.request.form.has_key('enable_published_notification'):
169            del self.request.form['enable_published_notification']
170         self.portal.prefs_comments_setup()
171         self.assert_(self.prefs.getProperty('enable_published_notification')==0,"Published Notification not terned OFF")
172
173
174 def test_suite():
175     from unittest import TestSuite, makeSuite
176     suite = TestSuite()
177     suite.addTest(makeSuite(TestConfiglet))
178     return suite
Note: See TracBrowser for help on using the browser.