Projet

Général

Profil

0001-workflows-jump-on-trigger-only-once-32326.patch

Thomas Noël, 15 avril 2019 17:27

Télécharger (3,4 ko)

Voir les différences:

Subject: [PATCH] workflows: jump on trigger only once (#32326)

 tests/test_api.py | 38 ++++++++++++++++++++++++++++++++++++++
 wcs/wf/jump.py    |  8 +++-----
 2 files changed, 41 insertions(+), 5 deletions(-)
tests/test_api.py
2188 2188
    resp = get_app(pub).post(sign_uri(formdata.get_url() + 'jump/trigger/XXX'))
2189 2189
    assert resp.json == {'err': 0, 'url': None}
2190 2190

  
2191
def test_workflow_trigger_jump_once(pub, local_user):
2192
    workflow = Workflow(name='test')
2193
    st1 = workflow.add_status('Status1', 'st1')
2194
    st2 = workflow.add_status('Status2', 'st2')
2195
    st3 = workflow.add_status('Status3', 'st3')
2196
    jump = JumpWorkflowStatusItem()
2197
    jump.trigger = 'XXX'
2198
    jump.status = 'st2'
2199
    st1.items.append(jump)
2200
    jump.parent = st1
2201
    jump = JumpWorkflowStatusItem()
2202
    jump.trigger = 'XXX'
2203
    jump.status = 'st3'
2204
    st2.items.append(jump)
2205
    jump.parent = st2
2206
    workflow.store()
2207

  
2208
    FormDef.wipe()
2209
    formdef = FormDef()
2210
    formdef.name = 'test'
2211
    formdef.fields = []
2212
    formdef.workflow_id = workflow.id
2213
    formdef.store()
2214

  
2215
    formdef.data_class().wipe()
2216
    formdata = formdef.data_class()()
2217
    formdata.just_created()
2218
    formdata.store()
2219
    assert formdef.data_class().get(formdata.id).status == 'wf-st1'
2220

  
2221
    resp = get_app(pub).post(sign_uri(formdata.get_url() + 'jump/trigger/XXX'))
2222
    assert resp.json == {'err': 0, 'url': None}
2223
    assert formdef.data_class().get(formdata.id).status == 'wf-st2'
2224

  
2225
    resp = get_app(pub).post(sign_uri(formdata.get_url() + 'jump/trigger/XXX'))
2226
    assert resp.json == {'err': 0, 'url': None}
2227
    assert formdef.data_class().get(formdata.id).status == 'wf-st3'
2228

  
2191 2229
def test_tracking_code(pub):
2192 2230
    FormDef.wipe()
2193 2231
    formdef = FormDef()
wcs/wf/jump.py
79 79
                    pass
80 80
                elif not item.check_auth(self.formdata, user):
81 81
                    raise errors.AccessForbiddenError()
82
                get_request().trigger_name = component
83
                if item.must_jump(self.formdata):
82
                if item.must_jump(self.formdata, trigger=item.trigger):
84 83
                    workflow_data = None
85 84
                    if hasattr(get_request(), 'json'):
86 85
                        workflow_data = get_request().json
......
222 221
        # ship condition check here so it is not evaluated twice.
223 222
        return True
224 223

  
225
    def must_jump(self, formdata):
224
    def must_jump(self, formdata, trigger=None):
226 225
        must_jump = True
227 226

  
228 227
        if self.condition:
......
233 232
                must_jump = False
234 233

  
235 234
        if self.trigger:
236
            triggered = (hasattr(get_request(), 'trigger_name') and
237
                         get_request().trigger_name == self.trigger)
235
            triggered = trigger is not None and trigger == self.trigger
238 236
            must_jump = must_jump and triggered
239 237

  
240 238
        if self.timeout:
241
-