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

Last change on this file since 1591 was 87, checked in by crchemist, 18 years ago

killed 0.3.0 tag

  • Property svn:eol-style set to native
File size: 8.3 KB
Line 
1#
2# Test configuration form working
3#
4
5from Products.PloneTestCase import PloneTestCase
6from Products.CMFCore.utils import getToolByName
7from Products.CMFCore.permissions import ReplyToItem
8from AccessControl.SecurityManagement import noSecurityManager
9
10PRODUCT = 'qPloneComments'
11PROPERTY_SHEET = "qPloneComments"
12
13USERS = {# 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        }
24COMMON_USERS_IDS = [u for u in USERS.keys() if not u.startswith('dm_')]
25COMMON_USERS_IDS.append('anonym')
26DM_USERS_IDS = [u for u in USERS.keys() if u.startswith('dm_')]
27
28PloneTestCase.installProduct(PRODUCT)
29PloneTestCase.setupPloneSite()
30
31def 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
44class 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
174def 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 repository browser.