1 # -*- coding: utf-8 -*-
3 from openerp import SUPERUSER_ID
4 from openerp.tests import common
7 class test_workflows(common.TransactionCase):
9 def check_activities(self, model_name, i, names):
10 """ Check that the record i has workitems in the given activity names.
12 instance = self.registry('workflow.instance')
13 workitem = self.registry('workflow.workitem')
15 # Given the workflow instance associated to the record ...
16 instance_id = instance.search(
17 self.cr, SUPERUSER_ID,
18 [('res_type', '=', model_name), ('res_id', '=', i)])
19 self.assertTrue( instance_id, 'A workflow instance is expected.')
21 # ... get all its workitems ...
22 workitem_ids = workitem.search(
23 self.cr, SUPERUSER_ID,
24 [('inst_id', '=', instance_id[0])])
27 'The workflow instance should have workitems.')
29 # ... and check the activity the are in against the provided names.
30 workitem_records = workitem.browse(
31 self.cr, SUPERUSER_ID, workitem_ids)
33 sorted([item.act_id.name for item in workitem_records]),
36 def check_value(self, model_name, i, value):
37 """ Check that the record i has the given value.
39 model = self.registry(model_name)
40 record = model.read(self.cr, SUPERUSER_ID, [i], ['value'])[0]
41 self.assertEqual(record['value'], value)
43 def test_workflow(self):
44 model = self.registry('test.workflow.model')
45 trigger = self.registry('test.workflow.trigger')
47 i = model.create(self.cr, SUPERUSER_ID, {})
48 self.check_activities(model._name, i, ['a'])
50 # a -> b is just a signal.
51 model.signal_workflow(self.cr, SUPERUSER_ID, [i], 'a-b')
52 self.check_activities(model._name, i, ['b'])
54 # b -> c is a trigger (which is False),
55 # so we remain in the b activity.
56 model.trigger(self.cr, SUPERUSER_ID, [i])
57 self.check_activities(model._name, i, ['b'])
59 # b -> c is a trigger (which is set to True).
60 # so we go in c when the trigger is called.
61 trigger.write(self.cr, SUPERUSER_ID, [1], {'value': True})
62 model.trigger(self.cr, SUPERUSER_ID)
63 self.check_activities(model._name, i, ['c'])
69 model.unlink(self.cr, SUPERUSER_ID, [i])
71 def test_workflow_a(self):
72 model = self.registry('test.workflow.model.a')
74 i = model.create(self.cr, SUPERUSER_ID, {})
75 self.check_activities(model._name, i, ['a'])
76 self.check_value(model._name, i, 0)
78 model.unlink(self.cr, SUPERUSER_ID, [i])
80 def test_workflow_b(self):
81 model = self.registry('test.workflow.model.b')
83 i = model.create(self.cr, SUPERUSER_ID, {})
84 self.check_activities(model._name, i, ['a'])
85 self.check_value(model._name, i, 1)
87 model.unlink(self.cr, SUPERUSER_ID, [i])
89 def test_workflow_c(self):
90 model = self.registry('test.workflow.model.c')
92 i = model.create(self.cr, SUPERUSER_ID, {})
93 self.check_activities(model._name, i, ['a'])
94 self.check_value(model._name, i, 0)
96 model.unlink(self.cr, SUPERUSER_ID, [i])
98 def test_workflow_d(self):
99 model = self.registry('test.workflow.model.d')
101 i = model.create(self.cr, SUPERUSER_ID, {})
102 self.check_activities(model._name, i, ['a'])
103 self.check_value(model._name, i, 1)
105 model.unlink(self.cr, SUPERUSER_ID, [i])
107 def test_workflow_e(self):
108 model = self.registry('test.workflow.model.e')
110 i = model.create(self.cr, SUPERUSER_ID, {})
111 self.check_activities(model._name, i, ['b'])
112 self.check_value(model._name, i, 2)
114 model.unlink(self.cr, SUPERUSER_ID, [i])
116 def test_workflow_f(self):
117 model = self.registry('test.workflow.model.f')
119 i = model.create(self.cr, SUPERUSER_ID, {})
120 self.check_activities(model._name, i, ['a'])
121 self.check_value(model._name, i, 1)
123 model.signal_workflow(self.cr, SUPERUSER_ID, [i], 'a-b')
124 self.check_activities(model._name, i, ['b'])
125 self.check_value(model._name, i, 2)
127 model.unlink(self.cr, SUPERUSER_ID, [i])
129 def test_workflow_g(self):
130 model = self.registry('test.workflow.model.g')
132 i = model.create(self.cr, SUPERUSER_ID, {})
133 self.check_activities(model._name, i, ['a'])
134 self.check_value(model._name, i, 1)
136 model.unlink(self.cr, SUPERUSER_ID, [i])
138 def test_workflow_h(self):
139 model = self.registry('test.workflow.model.h')
141 i = model.create(self.cr, SUPERUSER_ID, {})
142 self.check_activities(model._name, i, ['b', 'c'])
143 self.check_value(model._name, i, 2)
145 model.unlink(self.cr, SUPERUSER_ID, [i])
147 def test_workflow_i(self):
148 model = self.registry('test.workflow.model.i')
150 i = model.create(self.cr, SUPERUSER_ID, {})
151 self.check_activities(model._name, i, ['b'])
152 self.check_value(model._name, i, 2)
154 model.unlink(self.cr, SUPERUSER_ID, [i])
156 def test_workflow_j(self):
157 model = self.registry('test.workflow.model.j')
159 i = model.create(self.cr, SUPERUSER_ID, {})
160 self.check_activities(model._name, i, ['a'])
161 self.check_value(model._name, i, 1)
163 model.unlink(self.cr, SUPERUSER_ID, [i])
165 def test_workflow_k(self):
166 model = self.registry('test.workflow.model.k')
168 i = model.create(self.cr, SUPERUSER_ID, {})
169 # Non-determinisitic: can be b or c
170 # self.check_activities(model._name, i, ['b'])
171 # self.check_activities(model._name, i, ['c'])
172 self.check_value(model._name, i, 2)
174 model.unlink(self.cr, SUPERUSER_ID, [i])
176 def test_workflow_l(self):
177 model = self.registry('test.workflow.model.l')
179 i = model.create(self.cr, SUPERUSER_ID, {})
180 self.check_activities(model._name, i, ['c', 'c', 'd'])
181 self.check_value(model._name, i, 3)
183 model.unlink(self.cr, SUPERUSER_ID, [i])