File: test_functional.py

package info (click to toggle)
zope-ldapuserfolder 2.8~beta-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 628 kB
  • ctags: 528
  • sloc: python: 4,921; xml: 68; makefile: 33
file content (195 lines) | stat: -rw-r--r-- 7,024 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#####################################################################
#
# test_join     "Functional" tests for adding members
#
# This software is governed by a license. See
# LICENSE.txt for the terms of this license.
#
#####################################################################
""" Unit tests for adding members.

$Id: test_join.py 37761 2005-08-06 14:52:28Z jens $
"""

from unittest import TestSuite, makeSuite, main, TestCase
import Testing
try:
    import Zope2
except ImportError: # BBB: for Zope 2.7
    import Zope as Zope2
Zope2.startup()

from AccessControl.SecurityManagement import newSecurityManager

try:
    from Products.CMFCore.tests.base.testcase import RequestTest
    from Products.CMFDefault.tests.test_join import MembershipTests
except ImportError:
    RequestTest = MembershipTests = TestCase


class LDAPMembershipTests(MembershipTests):

    def _makePortal(self):
        from Acquisition import aq_base
        from Products.LDAPUserFolder.tests.base.dummy import LDAPDummyUserFolder
        try:
            factory = self.root.manage_addProduct['CMFDefault'].addConfiguredSite
        except AttributeError:
            # CMF 1.5.x
            factory = self.root.manage_addProduct['CMFSetup'].addConfiguredSite
        factory( 'site'
               , 'CMFDefault:default'
               , snapshot=False
               , extension_ids=('LDAPUserFolder:default',)
               )

        # Remove the "standard" user folder and replace it with a
        # LDAPDummyUserFolder
        self.root.site.manage_delObjects(['acl_users'])
        self.root.site._setObject('acl_users', LDAPDummyUserFolder())

        # Register one new attribute for testing
        self.root.site.portal_memberdata.addMemberProperty('sn')

        if hasattr(aq_base(self.root.site), 'clearCurrentSkin'):
            self.root.site.clearCurrentSkin()
        else: # CMF 1.4
            self.root.site._v_skindata = None

        self.root.site.changeSkin('Basic')
        return self.root.site


    def test_join_rdn_not_login( self ):
        # Test joing for situations where the login attribute is not the
        # same as the RDN attribute
        site = self._makePortal()
        site.acl_users._login_attr = 'sn'
        member_id = 'MyLastName'

        # If the RDN attribute is not provided, a ValueError is raised
        self.assertRaises( ValueError
                         , site.portal_registration.addMember
                         , member_id
                         , 'zzyyxx'
                         , properties={ 'username': member_id
                                      , 'email' : 'foo@bar.com'
                                      }
                         )
        u = site.acl_users.getUser(member_id)
        self.failIf(u)

        # We provide it, so this should work
        site.portal_registration.addMember( member_id
                                          , 'zzyyzz'
                                          , properties={ 'username': member_id
                                                       , 'email' : 'foo@bar.com'
                                                       , 'cn' : 'someuser'
                                                       }
                                          )
        u = site.acl_users.getUser(member_id)
        self.failUnless(u)


class LDAPMembershipFunctionalTests(RequestTest):

    def _makePortal(self):
        from Products.LDAPUserFolder.tests.base.dummy import LDAPDummyUserFolder
        try:
            factory = self.root.manage_addProduct['CMFDefault'].addConfiguredSite
        except AttributeError:
            # CMF 1.5.x
            factory = self.root.manage_addProduct['CMFSetup'].addConfiguredSite

        factory( 'site'
               , 'CMFDefault:default'
               , snapshot=False
               , extension_ids=('LDAPUserFolder:default',)
               )

        # Remove the "standard" user folder and replace it with a
        # LDAPDummyUserFolder
        self.root.site.manage_delObjects(['acl_users'])
        self.root.site._setObject('acl_users', LDAPDummyUserFolder())

        # Register member properties with the shiny new member data tool
        mdt = self.root.site.portal_memberdata
        mdt.addMemberProperty('sn')
        mdt.addMemberProperty('givenName')
        mdt.addMemberProperty('telephoneNumber')

        return self.root.site


    def test_join_superhighlevel(self):
        # Make sure the member data wrapper carries correct properties
        # after joining
        site = self._makePortal()
        member_id = 'test_user'

        controller_script = site.members_add_control
        status = controller_script(member_id, 'zzyyzz', 'foo@bar.com')

        # If everything worked correctly, the status will be False and the
        # portal_status_message will proclaim success
        self.assertEqual(status, False)
        self.assertEqual( str(site.REQUEST.other['portal_status_message'])
                        , 'Success!'
                        )

        m = site.portal_membership.getMemberById('test_user')
        self.assertEqual(m.getProperty('email'), 'foo@bar.com')
        self.assertEqual(m.getMemberId(), member_id)
        self.assertEqual(m.getRoles(), ('Member', 'Authenticated'))


    def test_personalize(self):
        site = self._makePortal()
        member_id = 'test_user'

        join_script = site.members_add_control
        personalize_script = site.personalize

        join_script(member_id, 'zzyyzz', 'foo@bar.com')
        m = site.portal_membership.getMemberById('test_user')

        # Log in as the new member because the personalization step is
        # operating on whoever is logged in at that moment
        newSecurityManager(None, m.getUser())

        # Stuff all values into the request becausse that's what the personalize
        # script uses to get values from
        req = self.root.REQUEST
        req.form = {}
        req.form['email'] = 'baz@foo.com'
        req.form['listed'] = 'on'
        req.form['portal_skin'] = 'Nouvelle'
        req.form['sn'] = 'Blow'
        req.form['givenName'] = 'Joe'
        req.form['telephoneNumber'] = '(888) 555-1212'

        personalize_script()

        m = site.portal_membership.getMemberById('test_user')
        self.assertEqual(m.getProperty('email'), 'baz@foo.com')
        self.failUnless(m.getProperty('listed'))
        self.assertEqual(m.getProperty('portal_skin'), 'Nouvelle')
        self.assertEqual(m.getProperty('sn'), 'Blow')
        self.assertEqual(m.getProperty('givenName'), 'Joe')
        self.assertEqual(m.getProperty('telephoneNumber'), '(888) 555-1212')


def test_suite():
    try:
        from Products import CMFCore
        return TestSuite((
            makeSuite(LDAPMembershipTests),
            makeSuite(LDAPMembershipFunctionalTests),
            ))
    except ImportError:
        # No CMF, no tests.
        return TestSuite(())

if __name__ == '__main__':
    main(defaultTest='test_suite')