From e1620ad1031763d85e85da970c013fa1332e6f9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 1 Jun 2021 18:00:51 +0200 Subject: [PATCH] workflows: fix status reassignment after deletion (#54493) --- tests/admin_pages/test_workflow.py | 57 ++++++++++++++++++++++++++++++ wcs/admin/workflows.py | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/tests/admin_pages/test_workflow.py b/tests/admin_pages/test_workflow.py index db62e606f..ef609aa1f 100644 --- a/tests/admin_pages/test_workflow.py +++ b/tests/admin_pages/test_workflow.py @@ -270,6 +270,63 @@ def test_workflows_delete_status(pub): resp = resp.follow() +def test_workflows_delete_status_reassign(pub): + create_superuser(pub) + Workflow.wipe() + workflow = Workflow(name='foo') + wf_bar = workflow.add_status(name='bar') + wf_baz = workflow.add_status(name='baz') + workflow.store() + + formdef = FormDef() + formdef.name = 'Form title' + formdef.workflow = workflow + formdef.fields = [] + formdef.store() + + formdef.data_class().wipe() + + formdata1 = formdef.data_class()() + formdata1.data = {} + formdata1.status = 'wf-%s' % wf_bar.id + formdata1.store() + + formdata2 = formdef.data_class()() + formdata2.data = {} + formdata2.status = 'wf-%s' % wf_baz.id + formdata2.store() + + app = login(get_app(pub)) + + for action in ('nothing', 'delete', 'reassign'): + # restore workflow & formdata + workflow.store() + formdata2.store() + + resp = app.get('/backoffice/workflows/1/status/%s/' % wf_baz.id) + resp = resp.click('Delete') + resp = resp.form.submit('submit') + assert resp.location.endswith('/reassign') + resp = resp.follow() + + if action == 'nothing': + resp.form['action'].value = 'Do nothing' + resp = resp.form.submit('submit') + resp = resp.follow() + assert formdef.data_class().get(formdata2.id).status == 'wf-%s' % wf_baz.id + elif action == 'remove': + resp.form['action'].value = 'Remove these forms' + resp = resp.form.submit('submit') + resp = resp.follow() + assert formdef.data_class().has_key(formdata1.id) + assert not formdef.data_class().has_key(formdata2.id) + elif action == 'reassign': + resp.form['action'].value = 'Change these forms status to "bar"' + resp = resp.form.submit('submit') + resp = resp.follow() + assert formdef.data_class().get(formdata2.id).status == 'wf-%s' % wf_bar.id + + def test_workflows_delete(pub): Workflow.wipe() workflow = Workflow(name='foo') diff --git a/wcs/admin/workflows.py b/wcs/admin/workflows.py index a8b026854..046a858b9 100644 --- a/wcs/admin/workflows.py +++ b/wcs/admin/workflows.py @@ -739,7 +739,7 @@ class WorkflowStatusPage(Directory): evo = Evolution() evo.time = time.localtime() evo.status = new_status - evo.comment = _('Administrator reassigned status') + evo.comment = str(_('Administrator reassigned status')) if not item.evolution: item.evolution = [] item.evolution.append(evo)