[1] | 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'] |
---|