341 [('activated', 'deactivated', 'deactivate', None), |
341 [('activated', 'deactivated', 'deactivate', None), |
342 ('deactivated', 'asleep', None, 'workflow changed to "CWUser"'), |
342 ('deactivated', 'asleep', None, 'workflow changed to "CWUser"'), |
343 ('asleep', 'activated', None, 'workflow changed to "default user workflow"'),]) |
343 ('asleep', 'activated', None, 'workflow changed to "default user workflow"'),]) |
344 |
344 |
345 |
345 |
|
346 |
|
347 class AutoTransitionTC(EnvBasedTC): |
|
348 |
|
349 def setup_database(self): |
|
350 self.wf = add_wf(self, 'CWUser') |
|
351 asleep = self.wf.add_state('asleep', initial=True) |
|
352 dead = self.wf.add_state('dead') |
|
353 self.wf.add_transition('rest', asleep, asleep) |
|
354 self.wf.add_transition('sick', asleep, dead, type=u'auto', |
|
355 conditions=({'expr': u'U surname "toto"', |
|
356 'mainvars': u'U'},)) |
|
357 |
|
358 def test_auto_transition_fired(self): |
|
359 user = self.create_user('member') |
|
360 self.execute('SET X custom_workflow WF WHERE X eid %(x)s, WF eid %(wf)s', |
|
361 {'wf': self.wf.eid, 'x': user.eid}) |
|
362 self.commit() |
|
363 user.clear_all_caches() |
|
364 self.assertEquals(user.state, 'asleep') |
|
365 self.assertEquals([t.name for t in user.possible_transitions()], |
|
366 ['rest']) |
|
367 user.fire_transition('rest') |
|
368 self.commit() |
|
369 user.clear_all_caches() |
|
370 self.assertEquals(user.state, 'asleep') |
|
371 self.assertEquals([t.name for t in user.possible_transitions()], |
|
372 ['rest']) |
|
373 self.assertEquals(parse_hist(user.workflow_history), |
|
374 [('asleep', 'asleep', 'rest', None)]) |
|
375 self.request().user.set_attributes(surname=u'toto') # fulfill condition |
|
376 self.commit() |
|
377 user.fire_transition('rest') |
|
378 self.commit() |
|
379 user.clear_all_caches() |
|
380 self.assertEquals(user.state, 'dead') |
|
381 self.assertEquals(parse_hist(user.workflow_history), |
|
382 [('asleep', 'asleep', 'rest', None), |
|
383 ('asleep', 'asleep', 'rest', None), |
|
384 ('asleep', 'dead', 'sick', None),]) |
|
385 |
|
386 |
346 from cubicweb.devtools.apptest import RepositoryBasedTC |
387 from cubicweb.devtools.apptest import RepositoryBasedTC |
347 |
388 |
348 class WorkflowHooksTC(RepositoryBasedTC): |
389 class WorkflowHooksTC(RepositoryBasedTC): |
349 |
390 |
350 def setUp(self): |
391 def setUp(self): |