1 | from DateTime import DateTime |
---|
2 | |
---|
3 | from Products.CMFCore.utils import getToolByName |
---|
4 | |
---|
5 | from Products.PloneTestCase import PloneTestCase |
---|
6 | |
---|
7 | from Products.qMemberdataExport.config import EXTERNAL_METHOD |
---|
8 | |
---|
9 | try: |
---|
10 | from Products import CMFMember |
---|
11 | cmfmember_installed = True |
---|
12 | except ImportError: |
---|
13 | cmfmember_installed = False |
---|
14 | |
---|
15 | try: |
---|
16 | from Products import PlonePAS |
---|
17 | pas_installed = True |
---|
18 | except ImportError: |
---|
19 | pas_installed = False |
---|
20 | |
---|
21 | PRODUCTS = ['qMemberdataExport',] |
---|
22 | |
---|
23 | if cmfmember_installed: PRODUCTS.append('CMFMember') |
---|
24 | |
---|
25 | map(PloneTestCase.installProduct, PRODUCTS) |
---|
26 | PloneTestCase.setupPloneSite(products=PRODUCTS) |
---|
27 | |
---|
28 | PRODUCT = 'qMemberdataExport' |
---|
29 | |
---|
30 | def maps_login(self, role): |
---|
31 | """ Utility method for login under required role """ |
---|
32 | from Testing.ZopeTestCase.PortalTestCase import user_name, user_password |
---|
33 | if role == 'manager': |
---|
34 | self.loginAsPortalOwner() |
---|
35 | elif role == 'member': |
---|
36 | self.login(user_name) |
---|
37 | elif role == 'another_member': |
---|
38 | self.login('another_member') |
---|
39 | elif role == 'anonym': |
---|
40 | self.logout() |
---|
41 | |
---|
42 | def parseCSV(self, data): |
---|
43 | """ Utility function for parsing csv and extracting some data form portal_memberdata """ |
---|
44 | import csv |
---|
45 | from cStringIO import StringIO |
---|
46 | from Products.qMemberdataExport import getRegisteredMemberdataHandlers as registry |
---|
47 | from Products.qMemberdataExport import PASMemberdataHandler, CMFMemberdataHandler, BaseMemberdataHandler |
---|
48 | |
---|
49 | datahandler = False |
---|
50 | |
---|
51 | for handler in registry(): |
---|
52 | try: |
---|
53 | datahandler = handler(self.portal) |
---|
54 | break |
---|
55 | except: |
---|
56 | pass |
---|
57 | |
---|
58 | if datahandler: |
---|
59 | props = datahandler.listAllMemberProperties(exclude_props=EXCLUDE_PROPS, include_props=INCLUDE_PROPS) |
---|
60 | if pas_installed: |
---|
61 | self.assertEquals(datahandler.__class__, PASMemberdataHandler) |
---|
62 | elif cmfmember_installed: |
---|
63 | self.assertEquals(datahandler.__class__, CMFMemberdataHandler) |
---|
64 | else: |
---|
65 | self.assertEquals(datahandler.__class__, BaseMemberdataHandler) |
---|
66 | else: |
---|
67 | self.fail('Registry does not have needed memberdata handler') |
---|
68 | |
---|
69 | reader = csv.DictReader(StringIO(data), fieldnames = props, quoting=csv.QUOTE_ALL) |
---|
70 | |
---|
71 | i = 0 |
---|
72 | res = [] |
---|
73 | for row in reader: |
---|
74 | properties = {} |
---|
75 | if i != 0 and row['id'] not in ['test_user_1_', 'portal_owner']: |
---|
76 | for field in row.keys(): |
---|
77 | properties[field] = row[field] |
---|
78 | res.append(properties) |
---|
79 | i += 1 |
---|
80 | |
---|
81 | self.failUnless(i-2 == len(PORTAL_MEMBERS), 'CSV output does not matcht to amount of portal members') |
---|
82 | |
---|
83 | members = [memb.copy() for memb in PORTAL_MEMBERS] |
---|
84 | for memb in members: |
---|
85 | del memb['roles'] |
---|
86 | del memb['last_login_time'] |
---|
87 | |
---|
88 | return (members, res) |
---|
89 | |
---|
90 | def addMember(self, username, fullname, email, roles, last_login_time): |
---|
91 | """ Utility function for simpler way of adding portal members with default password 'secret' """ |
---|
92 | self.membership.addMember(username, 'secret', roles, []) |
---|
93 | member = self.membership.getMemberById(username) |
---|
94 | member.setMemberProperties({'fullname': fullname, 'email': email, |
---|
95 | 'last_login_time': DateTime(last_login_time),}) |
---|
96 | |
---|
97 | # testing stuff for adding members to portal |
---|
98 | PORTAL_MEMBERS = [{ |
---|
99 | 'id' : 'Fred', |
---|
100 | 'fullname' : 'Fred Flintstone', |
---|
101 | 'email' : 'fred@bedrock.com', |
---|
102 | 'roles' : ['Member', 'Reviewer'], |
---|
103 | 'last_login_time' : '2002/01/01'}, |
---|
104 | { |
---|
105 | 'id' : 'admin', |
---|
106 | 'fullname' : 'Admin', |
---|
107 | 'email' : 'admin@admin.com', |
---|
108 | 'roles' : ['Manager'], |
---|
109 | 'last_login_time' : '2003/12/28'}, |
---|
110 | { |
---|
111 | 'id' : 'barney', |
---|
112 | 'fullname' : 'Barney Rubble', |
---|
113 | 'email' : 'barney@bedrock.com', |
---|
114 | 'roles' : ['Member'], |
---|
115 | 'last_login_time' : '2002/01/01'}, |
---|
116 | { |
---|
117 | 'id' : 'brubble', |
---|
118 | 'fullname' : 'Bambam Rubble', |
---|
119 | 'email' : 'bambam@bambam.net', |
---|
120 | 'roles' : ['Member'], |
---|
121 | 'last_login_time' : '2003/12/31'}, |
---|
122 | ] |
---|
123 | |
---|
124 | EXCLUDE_PROPS = ['portrait', 'password', 'mail_me', |
---|
125 | 'confirm_password','login_time', 'last_login_time', |
---|
126 | 'listed','fc_internal_data', 'review_state', |
---|
127 | 'roles', 'domains', 'groups'] |
---|
128 | |
---|
129 | INCLUDE_PROPS = ['id', 'fullname', 'email'] |
---|