entities/test/unittest_wfobjs.py
changeset 3629 559cad62c786
parent 3589 a5432f99f2d9
parent 3628 440931181322
child 3890 d7a270f50f54
equal deleted inserted replaced
3590:1b0dbcf4b214 3629:559cad62c786
   156         self.execute('INSERT RQLExpression X: X exprtype "ERQLExpression", '
   156         self.execute('INSERT RQLExpression X: X exprtype "ERQLExpression", '
   157                      'X expression "U has_update_permission X", T condition X '
   157                      'X expression "U has_update_permission X", T condition X '
   158                      'WHERE T name "deactivate"')
   158                      'WHERE T name "deactivate"')
   159         self._test_stduser_deactivate()
   159         self._test_stduser_deactivate()
   160 
   160 
   161     def test_subworkflow_base(self):
   161     def test_swf_base(self):
   162         """subworkflow
   162         """subworkflow
   163 
   163 
   164         +-----------+  tr1   +-----------+
   164         +-----------+  tr1   +-----------+
   165         | swfstate1 | ------>| swfstate2 |
   165         | swfstate1 | ------>| swfstate2 |
   166         +-----------+        +-----------+
   166         +-----------+        +-----------+
   237                                ('state1', 'swfstate1', 'swftr1', 'au'),
   237                                ('state1', 'swfstate1', 'swftr1', 'au'),
   238                                ('swfstate1', 'swfstate3', 'tr2', 'chapeau'),
   238                                ('swfstate1', 'swfstate3', 'tr2', 'chapeau'),
   239                                ('swfstate3', 'state3', 'swftr1', 'exiting from subworkflow subworkflow'),
   239                                ('swfstate3', 'state3', 'swftr1', 'exiting from subworkflow subworkflow'),
   240                                ])
   240                                ])
   241 
   241 
   242     def test_subworkflow_exit_consistency(self):
   242     def test_swf_exit_consistency(self):
   243         # sub-workflow
   243         # sub-workflow
   244         swf = add_wf(self, 'CWGroup', name='subworkflow')
   244         swf = add_wf(self, 'CWGroup', name='subworkflow')
   245         swfstate1 = swf.add_state(u'swfstate1', initial=True)
   245         swfstate1 = swf.add_state(u'swfstate1', initial=True)
   246         swfstate2 = swf.add_state(u'swfstate2')
   246         swfstate2 = swf.add_state(u'swfstate2')
   247         tr1 = swf.add_transition(u'tr1', (swfstate1,), swfstate2)
   247         tr1 = swf.add_transition(u'tr1', (swfstate1,), swfstate2)
   253         mwf.add_wftransition(u'swftr1', swf, state1,
   253         mwf.add_wftransition(u'swftr1', swf, state1,
   254                              [(swfstate2, state2), (swfstate2, state3)])
   254                              [(swfstate2, state2), (swfstate2, state3)])
   255         ex = self.assertRaises(ValidationError, self.commit)
   255         ex = self.assertRaises(ValidationError, self.commit)
   256         self.assertEquals(ex.errors, {'subworkflow_exit': u"can't have multiple exits on the same state"})
   256         self.assertEquals(ex.errors, {'subworkflow_exit': u"can't have multiple exits on the same state"})
   257 
   257 
       
   258     def test_swf_fire_in_a_row(self):
       
   259         # sub-workflow
       
   260         subwf = add_wf(self, 'CWGroup', name='subworkflow')
       
   261         xsigning = subwf.add_state('xsigning', initial=True)
       
   262         xaborted = subwf.add_state('xaborted')
       
   263         xsigned = subwf.add_state('xsigned')
       
   264         xabort = subwf.add_transition('xabort', (xsigning,), xaborted)
       
   265         xsign = subwf.add_transition('xsign', (xsigning,), xsigning)
       
   266         xcomplete = subwf.add_transition('xcomplete', (xsigning,), xsigned,
       
   267                                          type=u'auto')
       
   268         # main workflow
       
   269         twf = add_wf(self, 'CWGroup', name='mainwf', default=True)
       
   270         created    = twf.add_state(_('created'), initial=True)
       
   271         identified = twf.add_state(_('identified'))
       
   272         released   = twf.add_state(_('released'))
       
   273         closed   = twf.add_state(_('closed'))
       
   274         twf.add_wftransition(_('identify'), subwf, (created,),
       
   275                              [(xsigned, identified), (xaborted, created)])
       
   276         twf.add_wftransition(_('release'), subwf, (identified,),
       
   277                              [(xsigned, released), (xaborted, identified)])
       
   278         twf.add_wftransition(_('close'), subwf, (released,),
       
   279                              [(xsigned, closed), (xaborted, released)])
       
   280         self.commit()
       
   281         group = self.add_entity('CWGroup', name=u'grp1')
       
   282         self.commit()
       
   283         for trans in ('identify', 'release', 'close'):
       
   284             group.fire_transition(trans)
       
   285             self.commit()
       
   286 
       
   287 
       
   288     def test_swf_magic_tr(self):
       
   289         # sub-workflow
       
   290         subwf = add_wf(self, 'CWGroup', name='subworkflow')
       
   291         xsigning = subwf.add_state('xsigning', initial=True)
       
   292         xaborted = subwf.add_state('xaborted')
       
   293         xsigned = subwf.add_state('xsigned')
       
   294         xabort = subwf.add_transition('xabort', (xsigning,), xaborted)
       
   295         xsign = subwf.add_transition('xsign', (xsigning,), xsigned)
       
   296         # main workflow
       
   297         twf = add_wf(self, 'CWGroup', name='mainwf', default=True)
       
   298         created    = twf.add_state(_('created'), initial=True)
       
   299         identified = twf.add_state(_('identified'))
       
   300         released   = twf.add_state(_('released'))
       
   301         twf.add_wftransition(_('identify'), subwf, created,
       
   302                              [(xaborted, None), (xsigned, identified)])
       
   303         twf.add_wftransition(_('release'), subwf, identified,
       
   304                              [(xaborted, None)])
       
   305         self.commit()
       
   306         group = self.add_entity('CWGroup', name=u'grp1')
       
   307         self.commit()
       
   308         for trans, nextstate in (('identify', 'xsigning'),
       
   309                                  ('xabort', 'created'),
       
   310                                  ('identify', 'xsigning'),
       
   311                                  ('xsign', 'identified'),
       
   312                                  ('release', 'xsigning'),
       
   313                                  ('xabort', 'identified')
       
   314                                  ):
       
   315             group.fire_transition(trans)
       
   316             self.commit()
       
   317             group.clear_all_caches()
       
   318             self.assertEquals(group.state, nextstate)
       
   319 
   258 
   320 
   259 class CustomWorkflowTC(CubicWebTC):
   321 class CustomWorkflowTC(CubicWebTC):
   260 
   322 
   261     def setup_database(self):
   323     def setup_database(self):
   262         self.member = self.create_user('member')
   324         self.member = self.create_user('member')