Changeset 652

Show
Ignore:
Timestamp:
11/23/06 10:23:20
Author:
piv
Message:

added testing for case CMFMember products is installed

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qMemberdataExport/trunk/CMFMemberdataHandler.py

    r651 r652  
    4242                schema = member.getSchema() 
    4343                fields = [f.getName() for f in schema.filterFields() 
    44                     if (f.getName() not in exclude_props) and (include_props and f.getName() in include_props or not iclude_props)] 
     44                    if (f.getName() not in exclude_props) and (include_props and f.getName() in include_props or not include_props)] 
    4545                for field in fields: 
    4646                    if field not in all_props: 
  • qMemberdataExport/trunk/Extensions/Install.py

    r651 r652  
    2323    else: out.write('%s external method already exists in portal\n' % EXTERNAL_METHOD) 
    2424 
    25 def addPythonScript(self, out): 
    26     """Add a PythonScript to portal root directory """ 
    27  
    28     if not hasattr(self, PYTHON_SCRIPT): 
    29         factory = self.manage_addProduct['PythonScripts'] 
    30         factory.manage_addPythonScript(PYTHON_SCRIPT) 
    31         script = getattr(self, PYTHON_SCRIPT) 
    32         if script: 
    33             script.ZPythonScript_edit(params='start=0,batch=400,exclude_props=None,include_props=None', 
    34                                       body='return context.%s(context, start, batch, exclude_props, include_props)' % EXTERNAL_METHOD) 
    35             out.write('%s python script added to portal\n' % PYTHON_SCRIPT) 
    36         else: out.write('installation procedure could not create python script\n') 
    37     else: out.write('%s python script already exists in portal\n' % PYTHON_SCRIPT) 
    38  
    3925def install(self): 
    4026    """ Product installation """ 
     
    4430    # add external method 
    4531    addExternalMethod(self, out) 
    46  
    47     # add python script 
    48 #    addPythonScript(self, out) 
    4932 
    5033    return out.getvalue() 
  • qMemberdataExport/trunk/config.py

    r651 r652  
    44 
    55EXTERNAL_METHOD = 'export_memberdata_as_csv' 
    6 PYTHON_SCRIPT   = 'exportMemberData' 
    76 
    87CLEAR_CACHE_COUNTER = 100 
  • qMemberdataExport/trunk/tests/commonTestingStuff.py

    r651 r652  
    55from Products.PloneTestCase import PloneTestCase 
    66 
    7 from Products.qMemberdataExport.config import PYTHON_SCRIPT, EXTERNAL_METHOD 
     7from Products.qMemberdataExport.config import EXTERNAL_METHOD 
    88 
    9 PRODUCTS=('qMemberdataExport',) 
     9try: 
     10    from Products import CMFMember 
     11    cmfmember_installed = True 
     12except ImportError: 
     13    cmfmember_installed = False 
     14 
     15PRODUCTS = ['qMemberdataExport',] 
     16 
     17if cmfmember_installed: PRODUCTS.append('CMFMember') 
    1018 
    1119map(PloneTestCase.installProduct, PRODUCTS) 
     
    3139    from cStringIO import StringIO 
    3240    from Products.qMemberdataExport import getRegisteredMemberdataHandlers as registry 
     41    from Products.qMemberdataExport import CMFMemberdataHandler, BaseMemberdataHandler 
    3342 
    3443    datahandler = False 
    35      
     44 
    3645    for handler in registry(): 
    3746        try: 
     
    4049        except: 
    4150            pass 
     51 
    4252    if datahandler: 
    4353        props = datahandler.listAllMemberProperties(exclude_props=EXCLUDE_PROPS, include_props=INCLUDE_PROPS) 
     54        if cmfmember_installed: 
     55            self.assertEquals(datahandler.__class__, CMFMemberdataHandler) 
     56        else: 
     57            self.assertEquals(datahandler.__class__, BaseMemberdataHandler) 
    4458    else: 
    45         props = [p for p in ['id',]+getToolByName(self.portal, 'portal_memberdata').propertyIds() if p not in EXCLUDE_PROPS] 
     59        self.fail('Registry does not have needed memberdata handler') 
     60 
    4661    reader = csv.DictReader(StringIO(data), fieldnames = props, quoting=csv.QUOTE_ALL) 
     62 
    4763    i = 0 
    4864    res = [] 
    4965    for row in reader: 
    5066        properties = {} 
    51         if i != 0 and row['id'] != 'test_user_1_'
     67        if i != 0 and row['id'] not in ['test_user_1_', 'portal_owner']
    5268            for field in row.keys(): 
    5369                properties[field] = row[field] 
    5470            res.append(properties) 
    5571        i += 1 
     72 
    5673    self.failUnless(i-2 == len(PORTAL_MEMBERS), 'CSV output does not matcht to amount of portal members') 
     74 
    5775    members = [memb.copy() for memb in PORTAL_MEMBERS] 
    5876    for memb in members: 
    5977        del memb['roles'] 
    6078        del memb['last_login_time'] 
     79 
    6180    return (members, res) 
    6281 
     
    97116EXCLUDE_PROPS = ['portrait', 'password', 'mail_me', 
    98117                 'confirm_password','login_time', 'last_login_time', 
    99                  'listed','fc_internal_data', 'review_state', ] 
     118                 'listed','fc_internal_data', 'review_state', 
     119                 'roles', 'domains', 'groups'] 
    100120 
    101 INCLUDE_PROPS = ['id', 'fullname', 'email', 'roles', 'domains', 'groups'
     121INCLUDE_PROPS = ['id', 'fullname', 'email'
  • qMemberdataExport/trunk/tests/testExternalMethod.py

    r651 r652  
    1414    def afterSetUp(self): 
    1515        """ AfterSetUp features """ 
     16 
     17        self.loginAsPortalOwner() 
    1618        self.qi = getToolByName(self.portal, 'portal_quickinstaller') 
    17         self.qi.installProduct(PRODUCT) 
    1819        self.method = getattr(self.portal, EXTERNAL_METHOD) 
    1920        self.membership = self.portal.portal_membership 
     
    2425        """ Test external script for good csv output stream """ 
    2526 
     27        if cmfmember_installed: 
     28            getToolByName(self.portal, 'cmfmember_control').upgrade(swallow_errors=0) 
    2629        forCompare = parseCSV(self, self.method(self.portal, exclude_props=EXCLUDE_PROPS, include_props=INCLUDE_PROPS)) 
    2730        self.failUnless(forCompare[0] == forCompare[1], 'Bad output from external method script') 
  • qMemberdataExport/trunk/tests/testFunctional.py

    r651 r652  
    1717        self.loginAsPortalOwner() 
    1818        self.qi = getToolByName(self.portal, 'portal_quickinstaller') 
    19         self.qi.installProduct(PRODUCT) 
    2019        self.membership = self.portal.portal_membership 
     20        self.path = '%s/%s' % (self.portal.id, EXTERNAL_METHOD) 
    2121        for m in PORTAL_MEMBERS: 
    2222            addMember(self, m['id'], m['fullname'], m['email'], m['roles'], m['last_login_time']) 
    23         self.response = self.sendRequest('%s/%s' % (self.portal.id, EXTERNAL_METHOD), {'exclude_props':[], 'include_props':INCLUDE_PROPS}, "GET") 
    24  
    25     def sendRequest(self, path, params={}, method="POST"): 
    26         """ Utility function """ 
    27  
    28         return self.publish(path, self.auth, extra=params, request_method=method) 
    29  
    3023 
    3124    def testExternalMethod(self): 
    32         """ Test exportMemberData python script """ 
     25        """ Test external method script for publishing """ 
    3326 
    34         forCompare = parseCSV(self, self.response.getBody()) 
     27        if cmfmember_installed: 
     28            getToolByName(self.portal, 'cmfmember_control').upgrade(swallow_errors=0) 
     29        response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) 
     30        forCompare = parseCSV(self, response.getBody()) 
    3531        self.failUnless(forCompare[0] == forCompare[1], '%s external method return bad CSV value' % EXTERNAL_METHOD) 
    3632 
     
    4036        import re 
    4137        pattern = re.compile(r'\s*attachment\;\s*filename=\s*memberdata\-\d{4}\-\d{2}\-\d{2}\-\d{2}\-\d{2}\-\d{2}\.csv\s*', re.I) 
    42         self.failUnless(pattern.search(self.response.getHeader('content-disposition')), 
     38        response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) 
     39        self.failUnless(pattern.search(response.getHeader('content-disposition')), 
    4340                                       'Bad response header \'Content Disposition\'') 
    4441 
     
    4643        """ Test response for content-type header """ 
    4744 
    48         self.failUnless(self.response.getHeader('content-type').find('text/csv') != -1, 
     45        response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) 
     46        self.failUnless(response.getHeader('content-type').find('text/csv') != -1, 
    4947                        'Bad response header \'Content Type\'') 
    5048 
     
    5250        """ Test external method for 'View' permission """ 
    5351 
    54         response = self.publish('%s/%s' % (self.portal.id, EXTERNAL_METHOD), 'barney:secret') 
     52        response = self.publish(self.path, 'barney:secret') 
    5553        type_header = response.getHeader('bobo-exception-type') 
    5654        location_header = response.getHeader('location') or ''