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