workflow_tests: allow testing alert workflow action (#88108)
This commit is contained in:
parent
7199e84903
commit
d4c3e7dc4e
|
@ -497,6 +497,34 @@ def test_workflow_tests_action_assert_history_message(pub):
|
|||
assert 'not configured' not in resp.text
|
||||
|
||||
|
||||
def test_workflow_tests_action_assert_alert(pub):
|
||||
create_superuser(pub)
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test title'
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
|
||||
testdef = TestDef.create_from_formdata(formdef, formdata)
|
||||
testdef.workflow_tests.actions = [
|
||||
workflow_tests.AssertAlert(id='1'),
|
||||
]
|
||||
testdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
||||
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
|
||||
assert 'not configured' in resp.text
|
||||
|
||||
resp = resp.click('Edit')
|
||||
resp.form['message'] = 'Hello'
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
assert 'not configured' not in resp.text
|
||||
|
||||
|
||||
def test_workflow_tests_action_assert_backoffice_field(pub):
|
||||
create_superuser(pub)
|
||||
|
||||
|
|
|
@ -737,6 +737,52 @@ def test_workflow_tests_history_message(pub):
|
|||
assert 'Expected history message: Hello 43' in excinfo.value.details
|
||||
|
||||
|
||||
def test_workflow_tests_alert(pub):
|
||||
user = pub.user_class(name='test user')
|
||||
user.store()
|
||||
|
||||
workflow = Workflow(name='Workflow One')
|
||||
new_status = workflow.add_status(name='New status')
|
||||
workflow.store()
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test title'
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
|
||||
testdef = TestDef.create_from_formdata(formdef, formdata)
|
||||
testdef.agent_id = user.id
|
||||
testdef.workflow_tests.actions = [
|
||||
workflow_tests.AssertAlert(message='Hello 42'),
|
||||
]
|
||||
|
||||
with pytest.raises(WorkflowTestError) as excinfo:
|
||||
testdef.run(formdef)
|
||||
assert str(excinfo.value) == 'No alert matching message.'
|
||||
assert 'Displayed alerts: None' in excinfo.value.details
|
||||
assert 'Expected alert: Hello 42' in excinfo.value.details
|
||||
|
||||
alert = new_status.add_action('displaymsg')
|
||||
alert.message = 'Hello {{ 41|add:1 }}'
|
||||
workflow.store()
|
||||
formdef.refresh_from_storage()
|
||||
|
||||
testdef.run(formdef)
|
||||
|
||||
testdef.workflow_tests.actions = [
|
||||
workflow_tests.AssertAlert(message='Hello 43'),
|
||||
]
|
||||
|
||||
with pytest.raises(WorkflowTestError) as excinfo:
|
||||
testdef.run(formdef)
|
||||
assert str(excinfo.value) == 'No alert matching message.'
|
||||
assert 'Displayed alerts: <p>Hello 42</p>' in excinfo.value.details
|
||||
assert 'Expected alert: Hello 43' in excinfo.value.details
|
||||
|
||||
|
||||
def test_workflow_tests_backoffice_fields(pub):
|
||||
user = pub.user_class(name='test user')
|
||||
user.store()
|
||||
|
|
|
@ -169,5 +169,8 @@ class DisplayMessageWorkflowStatusItem(WorkflowStatusItem):
|
|||
location = '%sitems/%s/' % (base_location, self.id)
|
||||
yield location, None, self.message
|
||||
|
||||
def get_workflow_test_action(self, *args, **kwargs):
|
||||
return self
|
||||
|
||||
|
||||
register_item_class(DisplayMessageWorkflowStatusItem)
|
||||
|
|
|
@ -849,3 +849,37 @@ class AssertHistoryMessage(WorkflowTestAction):
|
|||
value=self.message,
|
||||
hint=_('Assertion will pass if the text is contained in history message.'),
|
||||
)
|
||||
|
||||
|
||||
class AssertAlert(WorkflowTestAction):
|
||||
label = _('Assert alert is displayed')
|
||||
details_label = ''
|
||||
|
||||
key = 'assert-alert'
|
||||
message = None
|
||||
|
||||
XML_NODES = WorkflowTestAction.XML_NODES + [
|
||||
('message', 'str'),
|
||||
]
|
||||
|
||||
def perform(self, formdata):
|
||||
messages = formdata.get_workflow_messages()
|
||||
|
||||
for message in messages:
|
||||
if self.message in message:
|
||||
break
|
||||
else:
|
||||
details = [
|
||||
_('Displayed alerts: %s') % (', '.join(messages) if messages else _('None')),
|
||||
_('Expected alert: %s') % self.message,
|
||||
]
|
||||
raise WorkflowTestError(_('No alert matching message.'), details=details)
|
||||
|
||||
def fill_admin_form(self, form, formdef):
|
||||
form.add(
|
||||
TextWidget,
|
||||
'message',
|
||||
title=_('Message'),
|
||||
value=self.message,
|
||||
hint=_('Assertion will pass if the text is contained in alert message.'),
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue