workflow: fix auto jump to unknown status (#43242)

This commit is contained in:
Lauréline Guérin 2020-06-22 14:38:44 +02:00
parent 7fe3a4b473
commit a5dde9f9c9
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 25 additions and 3 deletions

View File

@ -5266,7 +5266,7 @@ def test_workflow_jump_previous_on_submit(pub):
def test_workflow_jump_previous_auto(pub):
user = create_user(pub)
create_user(pub)
create_environment(pub)
wf = Workflow(name='blah')
@ -5318,6 +5318,25 @@ def test_workflow_jump_previous_auto(pub):
assert formdata.status == 'wf-south'
assert formdata.workflow_data['_markers_stack'] == [{'status_id': 'north'}]
# no marker (workflow inconsistency)
formdata.workflow_data['_markers_stack'] = []
formdata.store()
resp = app.get('/backoffice/management/form-title/%s/' % formdata.id)
resp = resp.form.submit('button_back')
resp = resp.follow()
formdata = formdef.data_class().get(formdata.id)
assert formdata.status == 'wf-south'
assert not formdata.workflow_data['_markers_stack']
# unknown marker (workflow inconsistency)
formdata.workflow_data['_markers_stack'] = [{'status_id': 'unknown_status'}]
formdata.store()
resp = app.get('/backoffice/management/form-title/%s/' % formdata.id)
resp = resp.form.submit('button_back')
resp = resp.follow()
formdata = formdef.data_class().get(formdata.id)
assert formdata.status == 'wf-south'
def test_backoffice_fields(pub):
user = create_user(pub)

View File

@ -578,14 +578,17 @@ class FormData(StorableObject):
wf_status.evaluate_live_form(form, self, user)
def pop_previous_marked_status(self):
if not self.workflow_data or not '_markers_stack' in self.workflow_data:
if not self.workflow_data or '_markers_stack' not in self.workflow_data:
return None
try:
marker_data = self.workflow_data['_markers_stack'].pop()
status_id = marker_data['status_id']
except IndexError:
return None
return self.formdef.workflow.get_status(status_id)
try:
return self.formdef.workflow.get_status(status_id)
except KeyError:
return None
def jump_status(self, status_id):
if status_id == '_previous':