wcs/tests/admin_pages/test_workflow_tests.py

863 lines
26 KiB
Python

import datetime
import os
import pytest
from django.utils.html import escape
from django.utils.timezone import make_aware
from wcs import workflow_tests
from wcs.formdef import FormDef, fields
from wcs.qommon.http_request import HTTPRequest
from wcs.testdef import TestDef, WebserviceResponse
from wcs.workflows import Workflow, WorkflowBackofficeFieldsFormDef, WorkflowCriticalityLevel
from ..utilities import create_temporary_pub, get_app, login
from .test_all import create_superuser
@pytest.fixture
def pub():
pub = create_temporary_pub()
req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
pub.set_app_dir(req)
pub.cfg['identification'] = {'methods': ['password']}
pub.write_cfg()
if not pub.site_options.has_section('options'):
pub.site_options.add_section('options')
pub.site_options.set('options', 'enable-workflow-tests', 'true')
with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
pub.site_options.write(fd)
FormDef.wipe()
TestDef.wipe()
WebserviceResponse.wipe()
return pub
def test_workflow_tests_link_feature_flag(pub):
create_superuser(pub)
formdef = FormDef()
formdef.name = 'test title'
formdef.store()
formdata = formdef.data_class()()
formdata.just_created()
formdata.store()
testdef = TestDef.create_from_formdata(formdef, formdata)
testdef.name = 'First test'
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/' % testdef.id)
assert 'Workflow tests' in resp.text
pub.site_options.set('options', 'enable-workflow-tests', 'false')
with open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w') as fd:
pub.site_options.write(fd)
resp = app.get('/backoffice/forms/1/tests/%s/' % testdef.id)
assert 'Workflow tests' not in resp.text
def test_workflow_tests_options(pub):
create_superuser(pub)
user = pub.user_class(name='test user')
user.email = 'test@example.com'
user.store()
formdef = FormDef()
formdef.name = 'test title'
formdef.store()
formdata = formdef.data_class()()
formdata.just_created()
formdata.store()
testdef = TestDef.create_from_formdata(formdef, formdata)
testdef.name = 'First test'
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
resp = resp.click('Options')
resp.form['agent'] = user.id
resp = resp.form.submit('submit').follow()
testdef = TestDef.get(testdef.id)
assert testdef.agent_id == str(user.id)
def test_workflow_tests_disabled_no_agent(pub):
user = create_superuser(pub)
formdef = FormDef()
formdef.name = 'test title'
formdef.store()
formdata = formdef.data_class()()
formdata.just_created()
formdata.store()
testdef = TestDef.create_from_formdata(formdef, formdata)
testdef.name = 'First test'
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert 'Backoffice user is not defined, workflow tests will not be executed.' in resp.text
resp = resp.click('Open test options')
resp.form['agent'] = user.id
resp.form.submit().follow()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert 'Backoffice user is not defined' not in resp.text
assert 'Open test options' not in resp.text
def test_workflow_tests_edit_actions(pub):
user = create_superuser(pub)
formdef = FormDef()
formdef.name = 'test title'
formdef.store()
formdata = formdef.data_class()()
formdata.just_created()
formdata.store()
testdef = TestDef.create_from_formdata(formdef, formdata)
testdef.name = 'First test'
testdef.agent_id = user.id
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/' % testdef.id)
resp = resp.click('Workflow tests')
assert 'There are no workflow test actions yet.' in resp.text
assert len(resp.pyquery('.biglist li')) == 0
option_labels = [x[2] for x in resp.form['type'].options]
assert (
option_labels.index('Assert email is sent')
< option_labels.index('Assert form status')
< option_labels.index('')
< option_labels.index('Move forward in time')
< option_labels.index('Simulate click on action button')
)
# add workflow test action through sidebar form
resp.form['type'] = 'button-click'
resp = resp.form.submit().follow()
assert 'There are no workflow test actions yet.' not in resp.text
assert len(resp.pyquery('.biglist li')) == 1
assert resp.pyquery('.biglist li .label').text() == 'Simulate click on action button'
assert 'not configured' in resp.text
resp = resp.click('Edit')
resp.form['button_name'] = 'Accept'
resp = resp.form.submit().follow()
assert 'not configured' not in resp.text
assert resp.text.count(escape('Click on "Accept"')) == 1
resp = resp.click('Duplicate').follow()
assert resp.text.count(escape('Click on "Accept"')) == 2
resp = resp.click('Edit', index=0)
resp.form['button_name'] = 'Reject'
resp = resp.form.submit().follow()
assert resp.text.count(escape('Click on "Accept"')) == 1
assert resp.text.count(escape('Click on "Reject"')) == 1
resp = resp.click('Delete', index=0)
resp = resp.form.submit().follow()
assert resp.text.count(escape('Click on "Accept"')) == 1
assert resp.text.count(escape('Click on "Reject"')) == 0
# simulate invalid action
testdef = TestDef.get(testdef.id)
testdef.workflow_tests.actions[0].key = 'xxx'
testdef.store()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert 'There are no workflow test actions yet.' in resp.text
def test_workflow_tests_action_button_click(pub):
create_superuser(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.workflow_tests.actions = [
workflow_tests.ButtonClick(id='1', button_name='Button 4'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert escape('Click on "Button 4" by backoffice user') in resp.text
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
assert 'Workflow has no action that displays a button.' in resp.text
jump = new_status.add_action('choice')
jump.label = 'Button 1'
jump.status = new_status.id
jump = new_status.add_action('choice')
jump.label = 'Button 2'
jump.status = new_status.id
jump = new_status.add_action('choice')
jump.label = 'Button no target status'
workflow.add_global_action('Action 1')
interactive_action = workflow.add_global_action('Interactive action (should not be shown)')
interactive_action.add_action('form')
workflow.store()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
assert resp.form['button_name'].options == [
('Action 1', False, 'Action 1'),
('Button 1', False, 'Button 1'),
('Button 2', False, 'Button 2'),
('Button 4 (not available)', True, 'Button 4 (not available)'),
]
resp.form['button_name'] = 'Button 1'
resp.form['who'] = 'submitter'
resp = resp.form.submit().follow()
assert escape('Click on "Button 1" by submitter') in resp.text
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
resp.form['who'] = 'other'
resp.form['who_id'].force_value(user.id)
resp = resp.form.submit().follow()
assert escape('Click on "Button 1" by test user') in resp.text
user.remove_self()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert escape('Click on "Button 1" by missing user') in resp.text
def test_workflow_tests_action_assert_status(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.AssertStatus(id='1', status_name='Deleted status'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
assert resp.form['status_name'].options == [
('Just Submitted', False, 'Just Submitted'),
('New', False, 'New'),
('Rejected', False, 'Rejected'),
('Accepted', False, 'Accepted'),
('Finished', False, 'Finished'),
('Deleted status (not available)', False, 'Deleted status (not available)'),
]
def test_workflow_tests_action_skip_time(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.SkipTime(id='1'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
resp.form['seconds'] = '1 day 1 hour 1 minute'
resp = resp.form.submit().follow()
assert TestDef.get(testdef.id).workflow_tests.actions[0].seconds == 25 * 60 * 60 + 60
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
assert resp.form['seconds'].value == '1 day, 1 hour and 1 minute'
resp = resp.form.submit().follow()
assert TestDef.get(testdef.id).workflow_tests.actions[0].seconds == 25 * 60 * 60 + 60
def test_workflow_tests_action_assert_email(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.AssertEmail(id='1'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert 'not configured' not in resp.text
assert 'Email to' not in resp.text
# empty configuration is allowed
resp = resp.click('Edit')
resp = resp.form.submit().follow()
resp = resp.click('Edit')
resp.form['subject_strings$element0'] = 'abc'
resp.form['body_strings$element0'] = 'def'
resp = resp.form.submit().follow()
assert 'Email to' not in resp.text
assert_email = TestDef.get(testdef.id).workflow_tests.actions[0]
assert assert_email.subject_strings == ['abc']
assert assert_email.body_strings == ['def']
resp = resp.click('Edit')
resp.form['addresses$element0'] = 'test@entrouvert.com'
resp = resp.form.submit().follow()
assert escape('Email to "test@entrouvert.com"') in resp.text
assert_email.addresses = ['a@entrouvert.com', 'b@entrouvert.com', 'c@entrouvert.com']
assert_email.parent.store()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert escape('Email to "a@entrouvert.com" (+2)') in resp.text
def test_workflow_tests_action_assert_sms(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.AssertSMS(id='1'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert 'not configured' not in resp.text
assert 'SMS to' not in resp.text
# empty configuration is allowed
resp = resp.click('Edit')
resp = resp.form.submit().follow()
resp = resp.click('Edit')
resp.form['phone_numbers$element0'] = '0123456789'
resp.form['body'] = 'Hello'
resp = resp.form.submit().follow()
assert 'SMS to 0123456789' in resp.text
assert_sms = TestDef.get(testdef.id).workflow_tests.actions[0]
assert assert_sms.phone_numbers == ['0123456789']
assert assert_sms.body == 'Hello'
assert_sms.phone_numbers = ['0123456789', '0123456781', '0123456782']
assert_sms.parent.store()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert escape('SMS to 0123456789 (+2)') in resp.text
def test_workflow_tests_action_assert_anonymise(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.AssertAnonymise(id='1'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert 'Edit' not in resp.text
def test_workflow_tests_action_assert_redirect(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.AssertRedirect(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['url'] = 'http://example.com'
resp = resp.form.submit().follow()
assert 'not configured' not in resp.text
assert 'http://example.com' in resp.text
def test_workflow_tests_action_assert_history_message(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.AssertHistoryMessage(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_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_criticality(pub):
create_superuser(pub)
workflow = Workflow(name='Workflow One')
workflow.add_status(name='New status')
workflow.store()
formdef = FormDef()
formdef.workflow_id = workflow.id
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.AssertCriticality(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')
assert 'Workflow has no criticality levels.' in resp.text
workflow.criticality_levels = [
WorkflowCriticalityLevel(name='green'),
WorkflowCriticalityLevel(name='red'),
]
workflow.store()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
resp.form['level_id'].select(text='green')
resp = resp.form.submit().follow()
assert 'not configured' not in resp.text
assert escape('Criticality is "green"') in resp.text
def test_workflow_tests_action_assert_backoffice_field(pub):
create_superuser(pub)
workflow = Workflow(name='Workflow One')
workflow.add_status(name='New status')
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
workflow.backoffice_fields_formdef.fields = [
fields.StringField(id='bo1', label='Text'),
fields.StringField(id='bo2', label='Text 2'),
]
workflow.store()
formdef = FormDef()
formdef.name = 'test title'
formdef.workflow = workflow
formdef.store()
formdata = formdef.data_class()()
formdata.just_created()
testdef = TestDef.create_from_formdata(formdef, formdata)
testdef.workflow_tests.actions = [
workflow_tests.AssertBackofficeFieldValues(id='1'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
assert resp.form['fields$element0$field_id'].options == [
('', False, ''),
('bo1', False, 'Text - Text (line)'),
('bo2', False, 'Text 2 - Text (line)'),
]
resp.form['fields$element0$field_id'] = 'bo2'
resp.form['fields$element0$value'] = 'xxx'
resp = resp.form.submit().follow()
assert_bakoffice_field_values = TestDef.get(testdef.id).workflow_tests.actions[0]
assert assert_bakoffice_field_values.fields == [
{'field_id': 'bo2', 'value': 'xxx'},
]
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
assert resp.form['fields$element0$field_id'].value == 'bo2'
assert resp.form['fields$element0$value'].value == 'xxx'
def test_workflow_tests_action_assert_webservice_call(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.AssertWebserviceCall(id='1'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
assert 'you must define corresponding webservice response' in resp.text
resp = resp.click('Add webservice response')
assert 'There are no webservice responses yet.' in resp.text
response = WebserviceResponse()
response.testdef_id = testdef.id
response.name = 'Fake response'
response.store()
response2 = WebserviceResponse()
response2.testdef_id = testdef.id
response2.name = 'Fake response 2'
response2.store()
response3 = WebserviceResponse()
response3.testdef_id = testdef.id + 1
response3.name = 'Other response'
response3.store()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
assert resp.form['webservice_response_uuid'].options == [
(str(response.uuid), False, 'Fake response'),
(str(response2.uuid), False, 'Fake response 2'),
]
assert resp.form['call_count'].value == '1'
resp.form['webservice_response_uuid'] = response.uuid
resp.form['call_count'] = 2
resp = resp.form.submit().follow()
assert 'Fake response' in resp.text
assert 'Broken' not in resp.text
assert_webservice_call = TestDef.get(testdef.id).workflow_tests.actions[0]
assert assert_webservice_call.webservice_response_uuid == response.uuid
assert assert_webservice_call.call_count == 2
response.remove_self()
resp = app.get('/backoffice/forms/1/tests/%s/workflow/' % testdef.id)
assert 'Broken, missing webservice response' in resp.text
assert 'Fake response' not in resp.text
def test_workflow_tests_actions_reorder(pub):
create_superuser(pub)
formdef = FormDef()
formdef.name = 'test title'
formdef.store()
formdata = formdef.data_class()()
formdata.just_created()
formdata.store()
testdef = TestDef.create_from_formdata(formdef, formdata)
testdef.name = 'First test'
testdef.workflow_tests.actions = [
workflow_tests.ButtonClick(id='0', button_name='First'),
workflow_tests.ButtonClick(id='1', button_name='Second'),
workflow_tests.ButtonClick(id='2', button_name='Third'),
workflow_tests.ButtonClick(id='3', button_name='Fourth'),
]
testdef.store()
app = login(get_app(pub))
url = '/backoffice/forms/%s/tests/%s/workflow/update_order' % (formdef.id, testdef.id)
# missing element in params: do nothing
resp = app.get(url + '?order=0;3;1;2;')
assert resp.json == {'success': 'ko'}
# missing order in params: do nothing
resp = app.get(url + '?element=0')
assert resp.json == {'success': 'ko'}
resp = app.get(url + '?order=0;3;1;2;&element=3')
assert resp.json == {'success': 'ok'}
testdef = TestDef.get(testdef.id)
assert [x.id for x in testdef.workflow_tests.actions] == ['0', '3', '1', '2']
# unknown id: ignored
resp = app.get(url + '?order=0;1;2;3;4;&element=3')
assert resp.json == {'success': 'ok'}
testdef = TestDef.get(testdef.id)
assert [x.id for x in testdef.workflow_tests.actions] == ['0', '1', '2', '3']
# missing id: do nothing
resp = app.get(url + '?order=0;3;1;&element=3')
assert resp.json == {'success': 'ko'}
testdef = TestDef.get(testdef.id)
assert [x.id for x in testdef.workflow_tests.actions] == ['0', '1', '2', '3']
def test_workflow_tests_run(pub):
user = create_superuser(pub)
role = pub.role_class(name='test role')
role.store()
user.roles = [role.id]
user.store()
workflow = Workflow(name='Workflow One')
new_status = workflow.add_status(name='New status')
sendmail = new_status.add_action('sendmail')
sendmail.to = ['test@example.org']
sendmail.subject = 'Hello'
sendmail.body = 'abc'
jump = new_status.add_action('choice')
jump.label = 'Loop on status'
jump.status = new_status.id
jump.by = [role.id]
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.ButtonClick(id='1', button_name='Loop on status'),
]
testdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/forms/1/tests/results/')
resp = resp.click('Run tests').follow()
assert len(resp.pyquery('tr')) == 1
assert 'Success!' in resp.text
# change button label
jump.label = 'xxx'
workflow.store()
resp = app.get('/backoffice/forms/1/tests/results/')
resp = resp.click('Run tests').follow()
assert escape('Workflow error: Button "Loop on status" is not displayed.') in resp.text
resp = resp.click('Display details')
assert 'Form status when error occured: New status' in resp.text
assert resp.pyquery('li#test-action').text() == 'Test action: Simulate click on action button'
assert (
resp.pyquery('li#test-action a').attr('href')
== 'http://example.net/backoffice/forms/1/tests/%s/workflow/#1' % testdef.id
)
testdef.workflow_tests.actions = []
testdef.store()
resp = app.get(resp.request.url)
assert 'Form status when error occured: New status' in resp.text
assert resp.pyquery('li#test-action').text() == 'Test action: deleted'
testdef.workflow_tests.actions = [
workflow_tests.AssertEmail(id='1', body_strings=['def']),
]
testdef.store()
resp = app.get('/backoffice/forms/1/tests/results/')
resp = resp.click('Run tests').follow()
assert escape('Email body does not contain "def".') in resp.text
resp = resp.click('Display details')
assert 'Form status when error occured: New status' in resp.text
assert 'Email body: \nabc' in resp.text
assert resp.pyquery('li#test-action').text() == 'Test action: Assert email is sent'
def test_workfow_tests_creation_from_formdata(pub):
create_superuser(pub)
workflow = Workflow(name='Workflow One')
new_status = workflow.add_status(name='New status')
end_status = workflow.add_status(name='End status')
jump = new_status.add_action('jump')
jump.status = end_status.id
workflow.store()
formdef = FormDef()
formdef.workflow_id = workflow.id
formdef.name = 'test title'
formdef.store()
app = login(get_app(pub))
formdata = formdef.data_class()()
formdata.just_created()
formdata.receipt_time = make_aware(datetime.datetime(2022, 1, 1, 0, 0))
formdata.store()
formdata.perform_workflow()
formdata.store()
resp = app.get('/backoffice/forms/%s/tests/new' % formdef.id)
resp.form['name'] = 'First test'
resp.form['creation_mode'] = 'formdata-wf'
resp.form['formdata'].select(text='1-1 - Unknown User - 2022-01-01 00:00')
resp = resp.form.submit().follow()
testdef = TestDef.select()[0]
assert len(testdef.workflow_tests.actions) == 1
assert testdef.workflow_tests.actions[0].key == 'assert-status'
assert testdef.workflow_tests.actions[0].status_name == 'End status'