0001-workflows-jump-on-trigger-only-once-32326.patch
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 |
- |