source: products/quintagroup.plonecomments/branches/jquery/quintagroup/plonecomments/tests/testQPloneCommentsConfiglet.py @ 3109

Last change on this file since 3109 was 3109, checked in by kroman0, 13 years ago

Pylint fixes

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