wf: send mail to user function (#57237)
gitea-wip/wcs/pipeline/head Build started... Details

This commit is contained in:
Lauréline Guérin 2021-09-27 16:05:52 +02:00
parent d407843150
commit 3ce5be80f2
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 54 additions and 0 deletions

View File

@ -12,6 +12,7 @@ from wcs.formdef import FormDef
from wcs.qommon.http_request import HTTPRequest
from wcs.qommon.upload_storage import PicklableUpload
from wcs.wf.backoffice_fields import SetBackofficeFieldsWorkflowStatusItem
from wcs.wf.dispatch import DispatchWorkflowStatusItem
from wcs.workflows import SendmailWorkflowStatusItem, Workflow, WorkflowBackofficeFieldsFormDef
from ..utilities import MockSubstitutionVariables, clean_temporary_pub, create_temporary_pub
@ -480,3 +481,47 @@ def test_workflow_email_line_details(pub):
sendmail.to = ['{{ foobar }}']
assert sendmail.get_line_details() == 'to computed value'
def test_workflow_email_to_user_function(pub, emails):
user = pub.user_class(name='foo')
user.email = 'foobar@localhost'
user.name_identifiers = ['0123456789']
user.store()
workflow = Workflow(name='wf roles')
st1 = workflow.add_status('Status1', 'st1')
item1 = DispatchWorkflowStatusItem()
item1.role_key = '_receiver'
item1.role_id = '{{ form_user }}'
st1.items.append(item1)
item1.parent = st1
item2 = SendmailWorkflowStatusItem()
item2.to = ['_receiver']
item2.subject = 'Foobar'
item2.body = 'Hello'
st1.items.append(item2)
item2.parent = st1
workflow.store()
formdef = FormDef()
formdef.name = 'baz'
formdef.fields = []
formdef.workflow_id = workflow.id
formdef.store()
formdata = formdef.data_class()()
formdata.user_id = user.id
formdata.just_created()
formdata.store()
pub.substitutions.feed(formdata)
item1.perform(formdata)
assert formdata.workflow_roles == {'_receiver': ['_user:%s' % user.id]}
emails.empty()
item2.perform(formdata)
get_response().process_after_jobs()
assert emails.count() == 1
assert emails.get('Foobar')
assert emails.get('Foobar')['email_rcpt'] == ['foobar@localhost']

View File

@ -3117,6 +3117,15 @@ class SendmailWorkflowStatusItem(WorkflowStatusItem):
continue
for real_dest in formdata.get_function_roles(dest):
if real_dest.startswith('_user:'):
try:
user = get_publisher().user_class.get(real_dest.split(':')[1])
except KeyError:
continue
if user.email:
addresses.append(user.email)
continue
try:
role = get_publisher().role_class.get(real_dest)
except KeyError: