[FIX] workflows: fixed the non-deterministic workflow K, added workflow L in tests.
bzr revid: vmt@openerp.com-20130726103600-t58rshix01q7vpot
This commit is contained in:
@@ -403,7 +403,7 @@
|
||||
<!-- Workflow K:
|
||||
|
||||
a xor -> b { value: 2 }
|
||||
`> c { value: 3 }
|
||||
`> c { value: 2 }
|
||||
|
||||
Only one (truish) transition is taken with a XOR.
|
||||
|
||||
@@ -434,7 +434,7 @@
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="name">c</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">write({'value': 3})</field>
|
||||
<field name="action">write({'value': 2})</field>
|
||||
</record>
|
||||
|
||||
<record id="trans_k_a_b" model="workflow.transition">
|
||||
@@ -445,5 +445,73 @@
|
||||
<field name="act_from" ref="activity_k_a"/>
|
||||
<field name="act_to" ref="activity_k_c"/>
|
||||
</record>
|
||||
|
||||
<!-- Workflow L:
|
||||
|
||||
a -> xor c { value: 3 }
|
||||
b ´
|
||||
a -> and d { value: 3 }
|
||||
b ´
|
||||
|
||||
c is run for each incoming (and taken) transition.
|
||||
d is run once when all its incoming transitions are taken at the same time.
|
||||
|
||||
-->
|
||||
<record id="test_workflow_l" model="workflow">
|
||||
<field name="name">test.workflow.l</field>
|
||||
<field name="osv">test.workflow.model.l</field>
|
||||
<field name="on_create">True</field>
|
||||
</record>
|
||||
|
||||
<record id="activity_l_a" model="workflow.activity">
|
||||
<field name="wkf_id" ref="test_workflow_l"/>
|
||||
<field name="flow_start">True</field>
|
||||
<field name="name">a</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">write({'value': 1})</field>
|
||||
<field name="split_mode">OR</field>
|
||||
</record>
|
||||
<record id="activity_l_b" model="workflow.activity">
|
||||
<field name="wkf_id" ref="test_workflow_l"/>
|
||||
<field name="flow_start">True</field>
|
||||
<field name="name">b</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">write({'value': 2})</field>
|
||||
<field name="split_mode">OR</field>
|
||||
</record>
|
||||
<record id="activity_l_c" model="workflow.activity">
|
||||
<field name="wkf_id" ref="test_workflow_l"/>
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="name">c</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">write({'value': 3})</field>
|
||||
<field name="join_mode">XOR</field>
|
||||
</record>
|
||||
<record id="activity_l_d" model="workflow.activity">
|
||||
<field name="wkf_id" ref="test_workflow_l"/>
|
||||
<field name="flow_stop">True</field>
|
||||
<field name="name">d</field>
|
||||
<field name="kind">function</field>
|
||||
<field name="action">write({'value': 3})</field>
|
||||
<field name="join_mode">AND</field>
|
||||
</record>
|
||||
|
||||
<record id="trans_l_a_c" model="workflow.transition">
|
||||
<field name="act_from" ref="activity_l_a"/>
|
||||
<field name="act_to" ref="activity_l_c"/>
|
||||
</record>
|
||||
<record id="trans_l_b_c" model="workflow.transition">
|
||||
<field name="act_from" ref="activity_l_b"/>
|
||||
<field name="act_to" ref="activity_l_c"/>
|
||||
</record>
|
||||
|
||||
<record id="trans_l_a_d" model="workflow.transition">
|
||||
<field name="act_from" ref="activity_l_a"/>
|
||||
<field name="act_to" ref="activity_l_d"/>
|
||||
</record>
|
||||
<record id="trans_l_b_d" model="workflow.transition">
|
||||
<field name="act_from" ref="activity_l_b"/>
|
||||
<field name="act_to" ref="activity_l_d"/>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -55,7 +55,7 @@ class e(openerp.osv.orm.Model):
|
||||
_name = 'test.workflow.model.e'
|
||||
_inherit = 'test.workflow.model.a'
|
||||
|
||||
for name in 'bcdefghijk':
|
||||
for name in 'bcdefghijkl':
|
||||
type(
|
||||
name,
|
||||
(openerp.osv.orm.Model,),
|
||||
|
||||
@@ -166,7 +166,18 @@ class test_workflows(common.TransactionCase):
|
||||
model = self.registry('test.workflow.model.k')
|
||||
|
||||
i = model.create(self.cr, SUPERUSER_ID, {})
|
||||
self.check_activities(model._name, i, ['b'])
|
||||
# Non-determinisitic: can be b or c
|
||||
# self.check_activities(model._name, i, ['b'])
|
||||
# self.check_activities(model._name, i, ['c'])
|
||||
self.check_value(model._name, i, 2)
|
||||
|
||||
model.unlink(self.cr, SUPERUSER_ID, [i])
|
||||
|
||||
def test_workflow_l(self):
|
||||
model = self.registry('test.workflow.model.l')
|
||||
|
||||
i = model.create(self.cr, SUPERUSER_ID, {})
|
||||
self.check_activities(model._name, i, ['c', 'c', 'd'])
|
||||
self.check_value(model._name, i, 3)
|
||||
|
||||
model.unlink(self.cr, SUPERUSER_ID, [i])
|
||||
|
||||
Reference in New Issue
Block a user