workflow: display role name on graph and inspect page (#56228)
gitea-wip/wcs/pipeline/head Build started... Details

This commit is contained in:
Lauréline Guérin 2021-08-19 14:40:37 +02:00
parent 3b9f87fb89
commit e71d636f31
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 95 additions and 2 deletions

View File

@ -25,6 +25,7 @@ from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef
from wcs.wf.jump import JumpWorkflowStatusItem
from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
from wcs.wf.roles import AddRoleWorkflowStatusItem, RemoveRoleWorkflowStatusItem
from wcs.wf.wscall import WebserviceCallStatusItem
from wcs.workflows import (
ChoiceWorkflowStatusItem,
@ -161,6 +162,48 @@ def test_workflows_svg(pub):
assert '/static/css/dc2/admin.css' in resp.text
def test_workflow_user_roles_svg(pub):
create_superuser(pub)
app = login(get_app(pub))
wf = Workflow(name='blah')
st1 = wf.add_status('New')
add_role = AddRoleWorkflowStatusItem()
remove_role = RemoveRoleWorkflowStatusItem()
st1.items.append(add_role)
st1.items.append(remove_role)
wf.store()
resp = app.get('/backoffice/workflows/%s/svg' % wf.id)
assert 'Role Addition (not' in resp
assert 'Role Removal (not' in resp
assert resp.text.count('configured)') == 2
add_role.role_id = 'foobar'
remove_role.role_id = 'barfoo'
wf.store()
resp = app.get('/backoffice/workflows/%s/svg' % wf.id)
assert 'Role Addition' in resp
assert '(unknown - foobar)' in resp
assert 'Role Removal' in resp
assert '(unknown - barfoo)' in resp
role_a = pub.role_class(name='role A')
role_a.store()
role_b = pub.role_class(name='role B')
role_b.store()
add_role.role_id = role_a.id
remove_role.role_id = role_b.id
wf.store()
resp = app.get('/backoffice/workflows/%s/svg' % wf.id)
assert 'Role Addition (role' in resp
assert 'A)' in resp
assert 'Role Removal (role' in resp
assert 'B)' in resp
def test_workflows_edit(pub):
Workflow.wipe()
workflow = Workflow(name='foo')

View File

@ -11,6 +11,7 @@ from wcs.wf.backoffice_fields import SetBackofficeFieldsWorkflowStatusItem
from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping
from wcs.wf.export_to_model import ExportToModel
from wcs.wf.jump import JumpWorkflowStatusItem
from wcs.wf.roles import AddRoleWorkflowStatusItem, RemoveRoleWorkflowStatusItem
from wcs.workflows import Workflow, WorkflowBackofficeFieldsFormDef
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
@ -139,3 +140,39 @@ def test_workflow_inspect_page(pub):
'<li><span class="parameter">Model:</span> '
'<a href="status/st3/items/_export_to/?file=model_file">test.rtf</a></li>'
) in resp.text
def test_workflow_user_roles_inspect_page(pub):
create_superuser(pub)
app = login(get_app(pub))
wf = Workflow(name='blah')
st1 = wf.add_status('New')
add_role = AddRoleWorkflowStatusItem()
remove_role = RemoveRoleWorkflowStatusItem()
st1.items.append(add_role)
st1.items.append(remove_role)
wf.store()
resp = app.get('/backoffice/workflows/%s/inspect' % wf.id)
assert '<li><span class="parameter">Role:</span>' not in resp
add_role.role_id = 'foobar'
remove_role.role_id = 'barfoo'
wf.store()
resp = app.get('/backoffice/workflows/%s/inspect' % wf.id)
assert '<li><span class="parameter">Role to Add:</span> unknown - foobar' in resp
assert '<li><span class="parameter">Role to Remove:</span> unknown - barfoo' in resp
role_a = pub.role_class(name='role A')
role_a.store()
role_b = pub.role_class(name='role B')
role_b.store()
add_role.role_id = role_a.id
remove_role.role_id = role_b.id
wf.store()
resp = app.get('/backoffice/workflows/%s/inspect' % wf.id)
assert '<li><span class="parameter">Role to Add:</span> role A' in resp
assert '<li><span class="parameter">Role to Remove:</span> role B' in resp

View File

@ -45,7 +45,20 @@ def sign_ws_url(url):
return sign_url(url, secret)
class AddRoleWorkflowStatusItem(WorkflowStatusItem):
class RoleMixin:
def get_role_id_parameter_view_value(self):
return self.get_line_details()
def get_line_details(self):
if not self.role_id:
return _('not configured')
role = get_publisher().role_class.get(self.role_id, ignore_errors=True)
if role is not None:
return role.name
return _('unknown - %s') % self.role_id
class AddRoleWorkflowStatusItem(RoleMixin, WorkflowStatusItem):
description = _('Role Addition')
key = 'add_role'
category = 'user-action'
@ -123,7 +136,7 @@ class AddRoleWorkflowStatusItem(WorkflowStatusItem):
register_item_class(AddRoleWorkflowStatusItem)
class RemoveRoleWorkflowStatusItem(WorkflowStatusItem):
class RemoveRoleWorkflowStatusItem(RoleMixin, WorkflowStatusItem):
description = _('Role Removal')
key = 'remove_role'
category = 'user-action'