source: products/qPloneComments/tags/2.3/tests/testQPloneCommentsConfiglet.py @ 1591

Last change on this file since 1591 was 1, checked in by myroslav, 18 years ago

Building directory structure

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