source: products/quintagroup.plonecomments/trunk/quintagroup/plonecomments/tests/testQPloneCommentsConfiglet.py @ 3127

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

Fixed tests after pep8 cleaning

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 afterSetUp(self):
30        self.loginAsPortalOwner()
31
32        # VERY IMPORTANT to guarantee product skin's content visibility
33        self._refreshSkinData()
34
35        '''Preparation for functional testing'''
36        # Allow discussion for Document
37        portal_types = getToolByName(self.portal, 'portal_types', None)
38        doc_fti = portal_types.getTypeInfo('Document')
39        doc_fti._updateProperty('allow_discussion', 1)
40
41        # Make sure Documents are visible by default
42        # XXX only do this for plone 3
43        self.portal.portal_workflow.setChainForPortalTypes(('Document',),
44                                                           'plone_workflow')
45
46        portal_properties = getToolByName(self.portal, 'portal_properties',
47                                          None)
48        self.prefs = portal_properties[PROPERTY_SHEET]
49        self.request = self.app.REQUEST
50
51        # Add Manager user - 'dm' and add him to Discussion Manager group
52        self.portal.portal_membership.addMember('dm', 'secret', ['Manager'],
53                                                [])
54        portal_groups = getToolByName(self.portal, 'portal_groups')
55        dm_group = portal_groups.getGroupById('DiscussionManager')
56        dm_group.addMember('dm')
57        #self.logout()
58        self.login('dm')
59        # For prepare mail sending - enter an e-mail adress
60        self.prefs._updateProperty('email_discussion_manager',
61                                   'discussion.manager@test.com')
62        member = self.portal.portal_membership.getAuthenticatedMember()
63        member.setMemberProperties({'email': 'creator@test.com'})
64        #self.fail(member.getMemberId()+' :: '+member.getUserName()+' \
65        #    :: '+str(member.getRoles())+' :: '+member.getProperty('email'))
66
67        # Add testing document to portal
68        self.portal.invokeFactory('Document', id='my_doc')
69        self.my_doc = self.portal['my_doc']
70        self.my_doc.edit(text_format='plain', text='hello world')
71
72    def testAnonymousCommenting(self):
73        def getReplyRoles():
74            return [r['name']
75                    for r in self.portal.rolesOfPermission(ReplyToItem)
76                    if r['selected'] == 'SELECTED']
77        # Simulate switching ON Anonymous Commenting
78        self.request.form['enable_anonymous_commenting'] = 'True'
79        self.portal.prefs_comments_setup()
80        actual_reply_permission = getReplyRoles()
81        self.failUnless('Anonymous' in actual_reply_permission, \
82            "'Reply to Item' permission set for %s. 'Anonymous' "
83            "role NOT added" % actual_reply_permission)
84        # Simulate switching OFF Anonymous Commenting
85        if 'enable_anonymous_commenting' in self.request.form:
86            del self.request.form['enable_anonymous_commenting']
87        self.portal.prefs_comments_setup()
88        actual_reply_permission = getReplyRoles()
89        self.failIf('Anonymous' in actual_reply_permission, \
90            "'Reply to Item' permission set for %s. 'Anonymous' role "
91            "NOT erased" % actual_reply_permission)
92
93    def testSwitchONModeration(self):
94        addUsers(self)
95        self.discussion = self.portal.portal_discussion
96        self.request.form['enable_anonymous_commenting'] = 'True'
97        self.request.form['enable_moderation'] = 'True'
98        self.portal.prefs_comments_setup()
99        # Create talkback for document and Add comment to my_doc
100        self.discussion.getDiscussionFor(self.my_doc)
101        self.my_doc.discussion_reply('Reply 1', 'text of reply')
102        # Check moderating discussion
103        # MUST ALLOW for: members of 'DiscussionMnagers' group
104        # MUST REFUSE for: NOT members of 'DiscussionMnagers' group
105        getReplies = self.discussion.getDiscussionFor(self.my_doc).getReplies
106        for u in DM_USERS_IDS:
107            self.logout()
108            self.login(u)
109            self.failUnless(getReplies(), "None discussion item added or "
110                            "discussion forbiden for %s user" % u)
111        for u in COMMON_USERS_IDS:
112            self.logout()
113            if not u == 'anonym':
114                self.login(u)
115            noSecurityManager()
116            self.failIf(getReplies(), "Viewing discussion item allow for "
117                                      "Anonymous user")
118
119    def testSwitchOFFModeration(self):
120        addUsers(self)
121        self.discussion = self.portal.portal_discussion
122        self.request.form['enable_anonymous_commenting'] = 'True'
123        self.portal.prefs_comments_setup()
124        # Create talkback for document and Add comment to my_doc
125        self.discussion.getDiscussionFor(self.my_doc)
126        creator = self.portal.portal_membership.getAuthenticatedMember()
127        self.request.form['Creator'] = creator.getUserName()
128        self.request.form['subject'] = "Reply 1"
129        self.request.form['body_text'] = "text of reply"
130        self.my_doc.discussion_reply('Reply 1', 'text of reply')
131        # Check moderating discussion
132        # MUST ALLOW for: user with any role or Anonym
133        all_users_ids = DM_USERS_IDS + COMMON_USERS_IDS
134        for u in all_users_ids:
135            self.logout()
136            if not u == 'anonym':
137                self.login(u)
138            discussion_for = self.discussion.getDiscussionFor(self.my_doc)
139            replies = discussion_for.getReplies()
140            self.failUnless(replies, "No discussion item added or discussion "
141                                     "forbidden for %s user" % u)
142
143    def testApproveNotification(self):
144        # Check ON Notification Anonymous Commenting
145        self.request.form['enable_approve_notification'] = 'True'
146        self.portal.prefs_comments_setup()
147        getProperty = self.prefs.getProperty
148        self.failUnless(getProperty('enable_approve_notification') == 1,
149            "Approve Notification not terned ON")
150
151        # Check OFF Notification Anonymous Commenting
152        if 'enable_approve_notification' in self.request.form:
153            del self.request.form['enable_approve_notification']
154        self.portal.prefs_comments_setup()
155        self.failUnless(getProperty('enable_approve_notification') == 0,
156            "Approve Notification not terned OFF")
157
158    def testPublishedNotification(self):
159        # Check ON Notification Anonymous Commenting
160        self.request.form['enable_published_notification'] = 'True'
161        self.portal.prefs_comments_setup()
162        getProperty = self.prefs.getProperty
163        self.failUnless(getProperty('enable_published_notification') == 1,
164            "Published Notification not terned ON")
165
166        # Check OFF Notification Anonymous Commenting
167        if 'enable_published_notification' in self.request.form:
168            del self.request.form['enable_published_notification']
169        self.portal.prefs_comments_setup()
170        self.failUnless(getProperty('enable_published_notification') == 0,
171            "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.