[MERGE] forward port of branch saas-3 up to revid 5060 chs@openerp.com-20140206131116...
[odoo/odoo.git] / openerp / tests / addons / test_workflow / tests / test_workflow.py
1 # -*- coding: utf-8 -*-
2 import openerp
3 from openerp import SUPERUSER_ID
4 from openerp.tests import common
5
6
7 class test_workflows(common.TransactionCase):
8
9     def check_activities(self, model_name, i, names):
10         """ Check that the record i has workitems in the given activity names.
11         """
12         instance = self.registry('workflow.instance')
13         workitem = self.registry('workflow.workitem')
14
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.')
20
21         # ... get all its workitems ...
22         workitem_ids = workitem.search(
23             self.cr, SUPERUSER_ID,
24             [('inst_id', '=', instance_id[0])])
25         self.assertTrue(
26             workitem_ids,
27             'The workflow instance should have workitems.')
28
29         # ... and check the activity the are in against the provided names.
30         workitem_records = workitem.browse(
31             self.cr, SUPERUSER_ID, workitem_ids)
32         self.assertEqual(
33             sorted([item.act_id.name for item in workitem_records]),
34             sorted(names))
35
36     def check_value(self, model_name, i, value):
37         """ Check that the record i has the given value.
38         """
39         model = self.registry(model_name)
40         record = model.read(self.cr, SUPERUSER_ID, [i], ['value'])[0]
41         self.assertEqual(record['value'], value)
42
43     def test_workflow(self):
44         model = self.registry('test.workflow.model')
45         trigger = self.registry('test.workflow.trigger')
46
47         i = model.create(self.cr, SUPERUSER_ID, {})
48         self.check_activities(model._name, i, ['a'])
49
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'])
53
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'])
58
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'])
64
65         self.assertEqual(
66             True,
67             True)
68
69         model.unlink(self.cr, SUPERUSER_ID, [i])
70
71     def test_workflow_a(self):
72         model = self.registry('test.workflow.model.a')
73
74         i = model.create(self.cr, SUPERUSER_ID, {})
75         self.check_activities(model._name, i, ['a'])
76         self.check_value(model._name, i, 0)
77
78         model.unlink(self.cr, SUPERUSER_ID, [i])
79
80     def test_workflow_b(self):
81         model = self.registry('test.workflow.model.b')
82
83         i = model.create(self.cr, SUPERUSER_ID, {})
84         self.check_activities(model._name, i, ['a'])
85         self.check_value(model._name, i, 1)
86
87         model.unlink(self.cr, SUPERUSER_ID, [i])
88
89     def test_workflow_c(self):
90         model = self.registry('test.workflow.model.c')
91
92         i = model.create(self.cr, SUPERUSER_ID, {})
93         self.check_activities(model._name, i, ['a'])
94         self.check_value(model._name, i, 0)
95
96         model.unlink(self.cr, SUPERUSER_ID, [i])
97
98     def test_workflow_d(self):
99         model = self.registry('test.workflow.model.d')
100
101         i = model.create(self.cr, SUPERUSER_ID, {})
102         self.check_activities(model._name, i, ['a'])
103         self.check_value(model._name, i, 1)
104
105         model.unlink(self.cr, SUPERUSER_ID, [i])
106
107     def test_workflow_e(self):
108         model = self.registry('test.workflow.model.e')
109
110         i = model.create(self.cr, SUPERUSER_ID, {})
111         self.check_activities(model._name, i, ['b'])
112         self.check_value(model._name, i, 2)
113
114         model.unlink(self.cr, SUPERUSER_ID, [i])
115
116     def test_workflow_f(self):
117         model = self.registry('test.workflow.model.f')
118
119         i = model.create(self.cr, SUPERUSER_ID, {})
120         self.check_activities(model._name, i, ['a'])
121         self.check_value(model._name, i, 1)
122
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)
126
127         model.unlink(self.cr, SUPERUSER_ID, [i])
128
129     def test_workflow_g(self):
130         model = self.registry('test.workflow.model.g')
131
132         i = model.create(self.cr, SUPERUSER_ID, {})
133         self.check_activities(model._name, i, ['a'])
134         self.check_value(model._name, i, 1)
135
136         model.unlink(self.cr, SUPERUSER_ID, [i])
137
138     def test_workflow_h(self):
139         model = self.registry('test.workflow.model.h')
140
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)
144
145         model.unlink(self.cr, SUPERUSER_ID, [i])
146
147     def test_workflow_i(self):
148         model = self.registry('test.workflow.model.i')
149
150         i = model.create(self.cr, SUPERUSER_ID, {})
151         self.check_activities(model._name, i, ['b'])
152         self.check_value(model._name, i, 2)
153
154         model.unlink(self.cr, SUPERUSER_ID, [i])
155
156     def test_workflow_j(self):
157         model = self.registry('test.workflow.model.j')
158
159         i = model.create(self.cr, SUPERUSER_ID, {})
160         self.check_activities(model._name, i, ['a'])
161         self.check_value(model._name, i, 1)
162
163         model.unlink(self.cr, SUPERUSER_ID, [i])
164
165     def test_workflow_k(self):
166         model = self.registry('test.workflow.model.k')
167
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)
173
174         model.unlink(self.cr, SUPERUSER_ID, [i])
175
176     def test_workflow_l(self):
177         model = self.registry('test.workflow.model.l')
178
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)
182
183         model.unlink(self.cr, SUPERUSER_ID, [i])