diff --git a/tests/admin_pages/test_tests.py b/tests/admin_pages/test_tests.py index c3de61a6c..8999c8613 100644 --- a/tests/admin_pages/test_tests.py +++ b/tests/admin_pages/test_tests.py @@ -1167,6 +1167,11 @@ def test_tests_duplicate(pub): response.name = 'Response xxx' response.store() + testdef.workflow_tests.actions.append( + workflow_tests.AssertWebserviceCall(id='3', webservice_response_uuid=response.uuid), + ) + testdef.store() + app = login(get_app(pub)) assert TestDef.count() == 1 @@ -1196,6 +1201,8 @@ def test_tests_duplicate(pub): assert testdef2.workflow_tests.actions[0].button_name == 'Go to end status' assert testdef1.get_webservice_responses()[0].name == 'Changed' assert testdef2.get_webservice_responses()[0].name == 'Response xxx' + assert testdef1.workflow_tests.actions[2].details_label == 'Changed' + assert testdef2.workflow_tests.actions[2].details_label == 'Response xxx' resp = app.get('/backoffice/forms/1/tests/%s/' % testdef.id) resp = resp.click('Duplicate') diff --git a/tests/admin_pages/test_workflow_tests.py b/tests/admin_pages/test_workflow_tests.py index ec5974824..fb5fcde51 100644 --- a/tests/admin_pages/test_workflow_tests.py +++ b/tests/admin_pages/test_workflow_tests.py @@ -664,13 +664,13 @@ def test_workflow_tests_action_assert_webservice_call(pub): response3.store() resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id) - assert resp.form['webservice_response_id'].options == [ - (str(response.id), False, 'Fake response'), - (str(response2.id), False, 'Fake response 2'), + 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_id'] = 1 + resp.form['webservice_response_uuid'] = response.uuid resp.form['call_count'] = 2 resp = resp.form.submit().follow() @@ -678,7 +678,7 @@ def test_workflow_tests_action_assert_webservice_call(pub): assert 'Broken' not in resp.text assert_webservice_call = TestDef.get(testdef.id).workflow_tests.actions[0] - assert assert_webservice_call.webservice_response_id == '1' + assert assert_webservice_call.webservice_response_uuid == response.uuid assert assert_webservice_call.call_count == 2 response.remove_self() diff --git a/tests/test_workflow_tests.py b/tests/test_workflow_tests.py index c8c00679c..e6253e80c 100644 --- a/tests/test_workflow_tests.py +++ b/tests/test_workflow_tests.py @@ -989,7 +989,7 @@ def test_workflow_tests_webservice(pub): testdef.workflow_tests.actions = [ workflow_tests.AssertStatus(status_name='End status'), - workflow_tests.AssertWebserviceCall(webservice_response_id=response.id, call_count=1), + workflow_tests.AssertWebserviceCall(webservice_response_uuid=response.uuid, call_count=1), ] with pytest.raises(WorkflowTestError) as excinfo: @@ -1004,7 +1004,7 @@ def test_workflow_tests_webservice(pub): assert str(excinfo.value) == 'Webservice response Fake response was used 2 times (instead of 1).' testdef.workflow_tests.actions = [ - workflow_tests.AssertWebserviceCall(webservice_response_id=response.id, call_count=2), + workflow_tests.AssertWebserviceCall(webservice_response_uuid=response.uuid, call_count=2), ] testdef.run(formdef) @@ -1021,8 +1021,8 @@ def test_workflow_tests_webservice(pub): response2.store() testdef.workflow_tests.actions = [ - workflow_tests.AssertWebserviceCall(webservice_response_id=response.id, call_count=1), - workflow_tests.AssertWebserviceCall(webservice_response_id=response2.id, call_count=1), + workflow_tests.AssertWebserviceCall(webservice_response_uuid=response.uuid, call_count=1), + workflow_tests.AssertWebserviceCall(webservice_response_uuid=response2.uuid, call_count=1), ] testdef.run(formdef) @@ -1032,8 +1032,8 @@ def test_workflow_tests_webservice(pub): testdef.run(formdef) testdef.workflow_tests.actions = [ - workflow_tests.AssertWebserviceCall(webservice_response_id=response.id, call_count=1), - workflow_tests.AssertWebserviceCall(webservice_response_id=response.id, call_count=1), + workflow_tests.AssertWebserviceCall(webservice_response_uuid=response.uuid, call_count=1), + workflow_tests.AssertWebserviceCall(webservice_response_uuid=response.uuid, call_count=1), ] with pytest.raises(WorkflowTestError) as excinfo: @@ -1041,7 +1041,7 @@ def test_workflow_tests_webservice(pub): assert str(excinfo.value) == 'Webservice response Fake response was used 0 times (instead of 1).' testdef.workflow_tests.actions = [ - workflow_tests.AssertWebserviceCall(webservice_response_id=response.id, call_count=0), + workflow_tests.AssertWebserviceCall(webservice_response_uuid=response.uuid, call_count=0), ] with pytest.raises(WorkflowTestError) as excinfo: @@ -1049,7 +1049,7 @@ def test_workflow_tests_webservice(pub): assert str(excinfo.value) == 'Webservice response Fake response was used 1 times (instead of 0).' testdef.workflow_tests.actions = [ - workflow_tests.AssertWebserviceCall(webservice_response_id='xxx', call_count=1), + workflow_tests.AssertWebserviceCall(webservice_response_uuid='xxx', call_count=1), ] with pytest.raises(WorkflowTestError) as excinfo: diff --git a/wcs/testdef.py b/wcs/testdef.py index a454f2231..1990a2aed 100644 --- a/wcs/testdef.py +++ b/wcs/testdef.py @@ -21,6 +21,7 @@ import io import json import socket import urllib.parse +import uuid import xml.etree.ElementTree as ET from contextlib import contextmanager @@ -75,8 +76,8 @@ class TestDefXmlProxy(XmlStorableObject): } excluded_fields = ['id', 'object_type', 'object_id'] extra_fields = [ - ('workflow_tests', 'workflow_tests'), ('_webservice_responses', 'webservice_responses'), + ('workflow_tests', 'workflow_tests'), ] return [ @@ -674,6 +675,7 @@ class WebserviceResponse(XmlStorableObject): _names = 'webservice-response' xml_root_node = 'webservice-response' + uuid = None testdef_id = None name = '' payload = None @@ -684,6 +686,7 @@ class WebserviceResponse(XmlStorableObject): post_data = None XML_NODES = [ + ('uuid', 'str'), ('testdef_id', 'int'), ('name', 'str'), ('payload', 'str'), @@ -694,6 +697,10 @@ class WebserviceResponse(XmlStorableObject): ('post_data', 'kv_data'), ] + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.uuid = str(uuid.uuid4()) + def __str__(self): return self.name diff --git a/wcs/workflow_tests.py b/wcs/workflow_tests.py index ae8998e93..6b5298e81 100644 --- a/wcs/workflow_tests.py +++ b/wcs/workflow_tests.py @@ -33,7 +33,7 @@ from wcs.qommon.form import ( ) from wcs.qommon.humantime import humanduration2seconds, seconds2humanduration, timewords from wcs.qommon.xml_storage import XmlStorableObject -from wcs.testdef import TestError, WebserviceResponse +from wcs.testdef import TestError from wcs.wf.backoffice_fields import SetBackofficeFieldRowWidget, SetBackofficeFieldsTableWidget from wcs.wf.profile import FieldNode @@ -661,20 +661,22 @@ class AssertWebserviceCall(WorkflowTestAction): label = _('Assert webservice call') key = 'assert-webservice-call' - webservice_response_id = None + webservice_response_uuid = None call_count = 1 optional_fields = ['call_count'] XML_NODES = WorkflowTestAction.XML_NODES + [ - ('webservice_response_id', 'str'), + ('webservice_response_uuid', 'str'), ('call_count', 'int'), ] @property def details_label(self): webservice_responses = [ - x for x in self.parent.testdef.get_webservice_responses() if x.id == self.webservice_response_id + x + for x in self.parent.testdef.get_webservice_responses() + if x.uuid == self.webservice_response_uuid ] if webservice_responses: return webservice_responses[0].name @@ -694,13 +696,17 @@ class AssertWebserviceCall(WorkflowTestAction): def perform(self, formdata): try: - response = WebserviceResponse.get(self.webservice_response_id) - except KeyError: + response = [ + x + for x in self.parent.testdef.get_webservice_responses() + if x.uuid == self.webservice_response_uuid + ][0] + except IndexError: raise WorkflowTestError(_('Broken, missing webservice response')) call_count = 0 for used_response in formdata.used_webservice_responses.copy(): - if used_response.id == self.webservice_response_id: + if used_response.uuid == self.webservice_response_uuid: formdata.used_webservice_responses.remove(used_response) call_count += 1 @@ -712,7 +718,7 @@ class AssertWebserviceCall(WorkflowTestAction): def fill_admin_form(self, form, formdef): webservice_response_options = [ - (response.id, response.name, response.id) + (response.uuid, response.name, response.uuid) for response in self.parent.testdef.get_webservice_responses() ] @@ -721,11 +727,11 @@ class AssertWebserviceCall(WorkflowTestAction): form.add( SingleSelectWidget, - 'webservice_response_id', + 'webservice_response_uuid', title=_('Webservice response'), options=webservice_response_options, required=True, - value=self.webservice_response_id, + value=self.webservice_response_uuid, ) form.add(IntWidget, 'call_count', title=_('Call count'), required=True, value=self.call_count)