Changeset 34710

Show
Ignore:
Timestamp:
03/24/06 17:28:45 (4 years ago)
Author:
gracinet
Message:

New functional test layer

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • CPSCourrier/trunk/tests/layer.py

    r34520 r34710  
    6363    ) 
    6464 
    65 class IntegrationTestCase(CPSTestCase): 
     65class CommonIntegrationFixture: 
     66    """ Things like site structure and such.""" 
     67 
     68    def fixtureSetUp(self): 
     69        # create test sandboxes in the mailboxes space 
     70        self.wftool = wftool = getToolByName(self.portal, 'portal_workflow') 
     71        self.ttool = ttool = getToolByName(self.portal, 'portal_types') 
     72        mailboxes = self.portal.mailboxes 
     73 
     74        wftool.invokeFactoryFor(mailboxes, 'Mailbox Group', self.MBG_ID) 
     75        self.mbg = mailboxes[self.MBG_ID] 
     76 
     77        wftool.invokeFactoryFor(self.mbg, 'Mailbox', self.MB_ID, 
     78                                **{'from': 'test_mailbox@cpscourrier.com'}) 
     79        self.mb = self.mbg[self.MB_ID] 
     80 
     81        wftool.invokeFactoryFor(self.mbg, 'Mailbox', self.MB2_ID, 
     82                                **{'from': 'test_mailbox2@cpscourrier.com'}) 
     83        self.mb2 = self.mbg[self.MB2_ID] 
     84 
     85class CPSCourrierFunctionalLayerClass(CommonIntegrationFixture, 
     86                                      CPSCourrierLayerClass): 
     87 
     88    """Functional testing layer. 
     89 
     90    The contract of testcases living in this layer is that they must 
     91    create their mail documents and clean up their mess. """ 
     92 
     93    #can't use __bases__ here, since method names change 
     94 
     95    MBG_ID = 'ftest-mailbox-group' 
     96    MB_ID = 'ftest-mailbox' 
     97    MB2_ID = 'ftest-mailbox2' 
     98 
     99    def setUp(self): 
     100        CPSCourrierLayerClass.setUp(self) 
     101        self.login() 
     102        CommonIntegrationFixture.fixtureSetUp(self) 
     103        # create some users 
     104        mtool = getToolByName(self.portal, 'portal_membership') 
     105        dtool = getToolByName(self.portal, 'portal_directories') 
     106        mdir = dtool['members'] 
     107 
     108        roles = {'reader': 'WorkspaceReader', 
     109                 'member1': 'WorkspaceMember', 
     110                 'member2': 'WorkspaceMember', 
     111                 'member3': 'WorkspaceMember', 
     112                 'manager': 'WorkspaceManager',} 
     113        for prefix, role in roles.items(): 
     114            for id, folder in ((self.MBG_ID, self.mbg,), 
     115                               (self.MB_ID, self.mb,), 
     116                               (self.MB2_ID, self.mb2,)): 
     117                user_id = '%s_%s' % (prefix, id) 
     118                mdir._createEntry({'id': user_id, 'roles':('Member',)}) 
     119                mtool.setLocalRoles(folder, [user_id], role) 
     120        transaction.commit() 
     121        self.logout() 
     122 
     123    def tearDown(self): 
     124        pass 
     125 
     126 
     127CPSCourrierFunctionalLayer = CPSCourrierFunctionalLayerClass( 
     128    __name__, 
     129    'CPSCourrierFunctionalLayer' 
     130    ) 
     131 
     132 
     133class IntegrationTestCase(CommonIntegrationFixture, CPSTestCase): 
     134    """For tests that need to avoid side-effects. 
     135 
     136    provides the same kind of environment as CPSCourrierFunctionalLayer. 
     137    doesn't share anything but profiles.""" 
     138 
    66139    layer = CPSCourrierLayer 
     140 
    67141    MBG_ID = 'test-mailbox-group' 
    68142    MB_ID = 'test-mailbox' 
     
    71145    def afterSetUp(self): 
    72146        self.login('manager') 
    73         # create test sandboxes in the mailboxes space 
    74         wftool = getToolByName(self.portal, 'portal_workflow') 
    75         ttool = getToolByName(self.portal, 'portal_types') 
    76         mailboxes = self.portal.mailboxes 
    77  
    78         wftool.invokeFactoryFor(mailboxes, 'Mailbox Group', self.MBG_ID) 
    79         self.mbg = mailboxes[self.MBG_ID] 
    80  
    81         wftool.invokeFactoryFor(self.mbg, 'Mailbox', self.MB_ID, 
    82                                 **{'from': 'test_mailbox@cpscourrier.com'}) 
    83         self.mb = self.mbg[self.MB_ID] 
    84  
    85         wftool.invokeFactoryFor(self.mbg, 'Mailbox', self.MB2_ID, 
    86                                 **{'from': 'test_mailbox2@cpscourrier.com'}) 
    87         self.mb2 = self.mbg[self.MB2_ID] 
    88  
     147        CommonIntegrationFixture.fixtureSetUp(self) 
    89148        # add some incoming mails 
    90149        incoming_mail_data = { 
     
    100159            }, 
    101160        } 
    102         mail_fti = ttool['Incoming Mail'] 
     161        mail_fti = self.ttool['Incoming Mail'] 
    103162        for mail_id, mail_data in incoming_mail_data.items(): 
    104163            dm = mail_fti.getDataModel(None) 
    105             wftool.invokeFactoryFor(self.mb, 'Incoming Mail', mail_id, 
     164            self.wftool.invokeFactoryFor(self.mb, 'Incoming Mail', mail_id, 
    106165                                    datamodel=dm, **mail_data) 
    107166            setattr(self, mail_id, self.mb[mail_id]) 
    108  
    109167        # this is required for cut/paste integration tests 
    110168        transaction.commit() 
     
    131189 
    132190 
     191class CourrierFunctionalTestCase(CPSTestCase): 
     192 
     193    layer = CPSCourrierFunctionalLayer 
     194 
     195    def afterSetUp(self): 
     196        self.mbg = getattr(self.portal.mailboxes, self.layer.MBG_ID) 
     197        self.mb = getattr(self.mbg, self.layer.MB_ID) 
     198        self.wftool = getToolByName(self.portal, 'portal_workflow') 
     199        self.ttool = getToolByName(self.portal, 'portal_types') 
     200 
     201    def flogin(self, prefix, object): 
     202        """ Login as prefixed user on object. 
     203 
     204        Typical use case: self.flogin('member1', self.mb) logs in as 
     205        one of the users that were created in layer to be WorkspaceMember in 
     206        self.mb. 
     207        """ 
     208        self.login('%s_%s' % (prefix, object.getId())) 
     209 
     210 
     211    def createIncoming(self, container=None, mail_id='incoming'): 
     212        """Create incoming mail and set it as an attr on self. 
     213 
     214        Default container is self.mb, 
     215        """ 
     216        self.createMail(container=container, 
     217                        mail_id=mail_id, 
     218                        portal_type="Incoming Mail") 
     219 
     220    def createOutgoing(self, container=None, mail_id='outgoing'): 
     221        """Create outgoing mail and set it as an attr on self. 
     222 
     223        Default container is self.mb, 
     224        """ 
     225        self.createMail(container=container, 
     226                        mail_id=mail_id, 
     227                        portal_type="Outgoing Mail") 
     228 
     229    def createMail(self, container=None, mail_id=None, portal_type=None): 
     230        """Create mail and set it as an attr on self using given id 
     231 
     232        Default container is self.mb 
     233        """ 
     234        if container is None: 
     235            container = self.mb 
     236 
     237        mail_fti = self.ttool[portal_type] 
     238        dm = mail_fti.getDataModel(None) 
     239        mail_id = self.wftool.invokeFactoryFor(self.mb, 
     240                                               portal_type, 
     241                                               mail_id, 
     242                                               datamodel=dm) 
     243 
     244        mail = container[mail_id] 
     245        setattr(self, mail_id, mail) 
     246        setattr(self, '%s_id' % mail_id, mail.getId()) 
  • CPSCourrier/trunk/tests/test_stacks.py

    r34347 r34710  
    2121import unittest 
    2222from zope.testing import doctest 
    23 from Products.CPSDefault.tests.CPSTestCase import CPSTestCase 
    24 from layer import CPSCourrierLayer 
     23from layer import CourrierFunctionalTestCase 
    2524 
    2625from Products.CMFCore.utils import getToolByName 
    27 from Products.CPSSchemas.DataModel import DataModel 
    28 from Products.CPSCourrier.workflows.stacks import HierarchicalStackWithData 
     26from Products.CPSCourrier.workflows.stacks import CourrierStack 
    2927 
    30 class HierarchicalStackWithDataIntegrationTestCase(CPSTestCase): 
    31  
    32     layer = CPSCourrierLayer 
     28class CourrierOutgoingStackFunctionalTestCase(CourrierFunctionalTestCase): 
     29    """ Quasifunctional tests for outgoing mails.""" 
    3330 
    3431    def afterSetUp(self): 
     32        CourrierFunctionalTestCase.afterSetUp(self) 
     33        self.stack = CourrierStack() 
    3534        self.login('manager') 
    36         self.stack = HierarchicalStackWithData() 
     35        self.createOutgoing() 
    3736 
    38         # Some content, necessary for wf checks 
    39         self.mailboxes = self.portal.mailboxes 
    40         wftool = getToolByName(self.portal, 'portal_workflow') 
    41  
    42         mboxgrp_id = wftool.invokeFactoryFor(self.mailboxes, 'Mailbox Group', 
    43                                              'mbox_group') 
    44         self.mbox_group = self.mailboxes[mboxgrp_id] 
    45  
    46         mbox_id = wftool.invokeFactoryFor(self.mbox_group, 'Mailbox Group', 
    47                                           'mbox') 
    48         self.mbox = self.mbox_group[mbox_id] 
    49  
    50         dm = DataModel(None) 
    51         outgoing_id = wftool.invokeFactoryFor(self.mbox, 'Outgoing Mail', 
    52                                           'outgoing_mail', datamodel=dm) 
    53         self.outgoing_mail = self.mbox[outgoing_id] 
     37    def beforeTearDown(self): 
     38        self.mb.manage_delObjects([self.outgoing_id]) 
     39        self.logout() 
    5440 
    5541    def test_getStackContentForRender(self): 
     
    6046                        d2=('A2', 'B2',)) 
    6147 
    62         extr = self.stack.getStackContentForRender(self.outgoing_mail
     48        extr = self.stack.getStackContentForRender(self.outgoing
    6349                                                   mode='view') 
    6450        # TODO: assertions 
    6551 
    6652 
     53class CourrierIncomingStackFunctionalTestCase(CourrierFunctionalTestCase): 
     54 
     55    def afterSetUp(self): 
     56        CourrierFunctionalTestCase.afterSetUp(self) 
     57        self.login('manager') 
     58        self.createIncoming() 
     59 
     60    def beforeTearDown(self): 
     61        self.mb.manage_delObjects([self.incoming_id]) 
     62        self.logout() 
     63 
     64    def test_handle(self): 
     65        self.flogin('member1', self.mb) 
     66        self.wftool.doActionFor(self.incoming, 'handle') 
     67 
     68        stack = self.wftool.getStackFor(self.incoming, 'Pilots') 
     69        self.assertEquals(stack.getAllLevels(), [0]) 
     70        elt = stack._getLevelContentValues()[0] 
     71        self.assertEquals(elt['directive'], 'handle') 
    6772 
    6873def test_suite(): 
    6974    return unittest.TestSuite(( 
    70         unittest.makeSuite(HierarchicalStackWithDataIntegrationTestCase), 
     75        unittest.makeSuite(CourrierOutgoingStackFunctionalTestCase), 
     76        unittest.makeSuite(CourrierIncomingStackFunctionalTestCase), 
    7177        doctest.DocFileTest('doc/developer/stacks.txt', 
    7278                            package='Products.CPSCourrier', 
  • CPSCourrier/trunk/tests/test_workflow_scripts.py

    r34671 r34710  
    417417        sci.object = in_mail 
    418418        sci.workflow = wftool.getWorkflowsFor(in_mail)[0] 
    419         init_stack_with_user(sci, 'Pilots', prefix='user_wdata', 
     419        init_stack_with_user(sci, 'Pilots', prefix='courrier_user', 
    420420                             directive='the_dir') 
    421421