workflow_tests: allow testing anonymise workflow action (#88108)
This commit is contained in:
parent
c0d2d36b3c
commit
03669bb847
|
@ -418,6 +418,28 @@ def test_workflow_tests_action_assert_sms(pub):
|
|||
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_backoffice_field(pub):
|
||||
create_superuser(pub)
|
||||
|
||||
|
|
|
@ -603,6 +603,51 @@ def test_workflow_tests_sms(pub):
|
|||
assert 'SMS body: "Hello"' in excinfo.value.details
|
||||
|
||||
|
||||
def test_workflow_tests_anonymise(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.AssertAnonymise(),
|
||||
]
|
||||
|
||||
with pytest.raises(WorkflowTestError) as excinfo:
|
||||
testdef.run(formdef)
|
||||
assert str(excinfo.value) == 'Form was not anonymised.'
|
||||
|
||||
anonymise_action = new_status.add_action('anonymise')
|
||||
workflow.store()
|
||||
formdef.refresh_from_storage()
|
||||
|
||||
testdef.run(formdef)
|
||||
|
||||
anonymise_action.mode = 'intermediate'
|
||||
workflow.store()
|
||||
formdef.refresh_from_storage()
|
||||
|
||||
testdef.run(formdef)
|
||||
|
||||
anonymise_action.mode = 'unlink_user'
|
||||
workflow.store()
|
||||
formdef.refresh_from_storage()
|
||||
|
||||
testdef.run(formdef)
|
||||
|
||||
|
||||
def test_workflow_tests_backoffice_fields(pub):
|
||||
user = pub.user_class(name='test user')
|
||||
user.store()
|
||||
|
@ -864,6 +909,9 @@ def test_workflow_tests_create_from_formdata(pub, http_requests, freezer):
|
|||
sendsms.to = ['0123456789']
|
||||
sendsms.body = 'Hello'
|
||||
|
||||
anonymise_action = transition_status.add_action('anonymise')
|
||||
anonymise_action.mode = 'intermediate'
|
||||
|
||||
jump = transition_status.add_action('jump')
|
||||
jump.status = end_status.id
|
||||
|
||||
|
@ -896,7 +944,7 @@ def test_workflow_tests_create_from_formdata(pub, http_requests, freezer):
|
|||
testdef.run(formdef)
|
||||
|
||||
actions = testdef.workflow_tests.actions
|
||||
assert len(actions) == 9
|
||||
assert len(actions) == 10
|
||||
|
||||
assert actions[0].key == 'assert-status'
|
||||
assert actions[0].status_name == 'Status with timeout jump'
|
||||
|
@ -914,6 +962,7 @@ def test_workflow_tests_create_from_formdata(pub, http_requests, freezer):
|
|||
assert actions[5].key == 'assert-email'
|
||||
assert actions[6].key == 'assert-backoffice-field'
|
||||
assert actions[7].key == 'assert-sms'
|
||||
assert actions[8].key == 'assert-anonymise'
|
||||
|
||||
assert actions[-1].key == 'assert-status'
|
||||
assert actions[-1].status_name == 'End status'
|
||||
|
|
|
@ -31,9 +31,11 @@
|
|||
</span>
|
||||
</span>
|
||||
<p class="commands">
|
||||
<span class="edit">
|
||||
<a href="{{ action.id }}/" rel="popup" title="{% trans "Edit" %}">{% trans "Edit" %}</a>
|
||||
</span>
|
||||
{% if action.editable %}
|
||||
<span class="edit">
|
||||
<a href="{{ action.id }}/" rel="popup" title="{% trans "Edit" %}">{% trans "Edit" %}</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
<span class="duplicate">
|
||||
<a href="{{ action.id }}/duplicate" title="{% trans "Duplicate" %}">{% trans "Duplicate" %}</a>
|
||||
</span>
|
||||
|
|
|
@ -82,5 +82,15 @@ class AnonymiseWorkflowStatusItem(WorkflowStatusItem):
|
|||
default_value=self.__class__.mode,
|
||||
)
|
||||
|
||||
def get_workflow_test_action(self, formdata, *args, **kwargs):
|
||||
original_perform = self.perform
|
||||
|
||||
def perform(formdata):
|
||||
original_perform(formdata)
|
||||
formdata.anonymisation_performed = True
|
||||
|
||||
setattr(self, 'perform', perform)
|
||||
return self
|
||||
|
||||
|
||||
register_item_class(AnonymiseWorkflowStatusItem)
|
||||
|
|
|
@ -93,6 +93,7 @@ class WorkflowTests(XmlStorableObject):
|
|||
formdata.sent_sms = []
|
||||
formdata.sent_emails = []
|
||||
formdata.used_webservice_responses = self.testdef.used_webservice_responses = []
|
||||
formdata.anonymisation_performed = False
|
||||
|
||||
formdata.perform_workflow()
|
||||
for action in self.actions:
|
||||
|
@ -105,6 +106,7 @@ class WorkflowTests(XmlStorableObject):
|
|||
formdata.sent_sms.clear()
|
||||
formdata.sent_emails.clear()
|
||||
formdata.used_webservice_responses.clear()
|
||||
formdata.anonymisation_performed = False
|
||||
|
||||
try:
|
||||
action.perform(formdata)
|
||||
|
@ -146,6 +148,7 @@ class WorkflowTests(XmlStorableObject):
|
|||
'set-backoffice-fields': AssertBackofficeFieldValues,
|
||||
'button': ButtonClick,
|
||||
'timeout-jump': SkipTime,
|
||||
'anonymise': AssertAnonymise,
|
||||
}
|
||||
|
||||
previous_trace = None
|
||||
|
@ -196,6 +199,7 @@ class WorkflowTestAction(XmlStorableObject):
|
|||
|
||||
optional_fields = []
|
||||
is_assertion = True
|
||||
editable = True
|
||||
|
||||
XML_NODES = [
|
||||
('id', 'str'),
|
||||
|
@ -760,3 +764,16 @@ class AssertSMS(WorkflowTestAction):
|
|||
title=_('Body'),
|
||||
value=self.body,
|
||||
)
|
||||
|
||||
|
||||
class AssertAnonymise(WorkflowTestAction):
|
||||
label = _('Assert anonymisation is performed')
|
||||
|
||||
key = 'assert-anonymise'
|
||||
|
||||
editable = False
|
||||
details_label = ''
|
||||
|
||||
def perform(self, formdata):
|
||||
if not formdata.anonymisation_performed:
|
||||
raise WorkflowTestError(_('Form was not anonymised.'))
|
||||
|
|
Loading…
Reference in New Issue