workflow_tests: preserve response of webservice assertion on test duplication (#88729)
gitea/wcs/pipeline/head This commit looks good
Details
gitea/wcs/pipeline/head This commit looks good
Details
This commit is contained in:
parent
d0358afa40
commit
dc473b7378
|
@ -1167,6 +1167,11 @@ def test_tests_duplicate(pub):
|
||||||
response.name = 'Response xxx'
|
response.name = 'Response xxx'
|
||||||
response.store()
|
response.store()
|
||||||
|
|
||||||
|
testdef.workflow_tests.actions.append(
|
||||||
|
workflow_tests.AssertWebserviceCall(id='3', webservice_response_uuid=response.uuid),
|
||||||
|
)
|
||||||
|
testdef.store()
|
||||||
|
|
||||||
app = login(get_app(pub))
|
app = login(get_app(pub))
|
||||||
|
|
||||||
assert TestDef.count() == 1
|
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 testdef2.workflow_tests.actions[0].button_name == 'Go to end status'
|
||||||
assert testdef1.get_webservice_responses()[0].name == 'Changed'
|
assert testdef1.get_webservice_responses()[0].name == 'Changed'
|
||||||
assert testdef2.get_webservice_responses()[0].name == 'Response xxx'
|
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 = app.get('/backoffice/forms/1/tests/%s/' % testdef.id)
|
||||||
resp = resp.click('Duplicate')
|
resp = resp.click('Duplicate')
|
||||||
|
|
|
@ -664,13 +664,13 @@ def test_workflow_tests_action_assert_webservice_call(pub):
|
||||||
response3.store()
|
response3.store()
|
||||||
|
|
||||||
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
|
resp = app.get('/backoffice/forms/1/tests/%s/workflow/1/' % testdef.id)
|
||||||
assert resp.form['webservice_response_id'].options == [
|
assert resp.form['webservice_response_uuid'].options == [
|
||||||
(str(response.id), False, 'Fake response'),
|
(str(response.uuid), False, 'Fake response'),
|
||||||
(str(response2.id), False, 'Fake response 2'),
|
(str(response2.uuid), False, 'Fake response 2'),
|
||||||
]
|
]
|
||||||
assert resp.form['call_count'].value == '1'
|
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.form['call_count'] = 2
|
||||||
resp = resp.form.submit().follow()
|
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 'Broken' not in resp.text
|
||||||
|
|
||||||
assert_webservice_call = TestDef.get(testdef.id).workflow_tests.actions[0]
|
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
|
assert assert_webservice_call.call_count == 2
|
||||||
|
|
||||||
response.remove_self()
|
response.remove_self()
|
||||||
|
|
|
@ -989,7 +989,7 @@ def test_workflow_tests_webservice(pub):
|
||||||
|
|
||||||
testdef.workflow_tests.actions = [
|
testdef.workflow_tests.actions = [
|
||||||
workflow_tests.AssertStatus(status_name='End status'),
|
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:
|
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).'
|
assert str(excinfo.value) == 'Webservice response Fake response was used 2 times (instead of 1).'
|
||||||
|
|
||||||
testdef.workflow_tests.actions = [
|
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)
|
testdef.run(formdef)
|
||||||
|
@ -1021,8 +1021,8 @@ def test_workflow_tests_webservice(pub):
|
||||||
response2.store()
|
response2.store()
|
||||||
|
|
||||||
testdef.workflow_tests.actions = [
|
testdef.workflow_tests.actions = [
|
||||||
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_id=response2.id, call_count=1),
|
workflow_tests.AssertWebserviceCall(webservice_response_uuid=response2.uuid, call_count=1),
|
||||||
]
|
]
|
||||||
|
|
||||||
testdef.run(formdef)
|
testdef.run(formdef)
|
||||||
|
@ -1032,8 +1032,8 @@ def test_workflow_tests_webservice(pub):
|
||||||
testdef.run(formdef)
|
testdef.run(formdef)
|
||||||
|
|
||||||
testdef.workflow_tests.actions = [
|
testdef.workflow_tests.actions = [
|
||||||
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_id=response.id, call_count=1),
|
workflow_tests.AssertWebserviceCall(webservice_response_uuid=response.uuid, call_count=1),
|
||||||
]
|
]
|
||||||
|
|
||||||
with pytest.raises(WorkflowTestError) as excinfo:
|
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).'
|
assert str(excinfo.value) == 'Webservice response Fake response was used 0 times (instead of 1).'
|
||||||
|
|
||||||
testdef.workflow_tests.actions = [
|
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:
|
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).'
|
assert str(excinfo.value) == 'Webservice response Fake response was used 1 times (instead of 0).'
|
||||||
|
|
||||||
testdef.workflow_tests.actions = [
|
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:
|
with pytest.raises(WorkflowTestError) as excinfo:
|
||||||
|
|
|
@ -21,6 +21,7 @@ import io
|
||||||
import json
|
import json
|
||||||
import socket
|
import socket
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
import uuid
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
|
@ -75,8 +76,8 @@ class TestDefXmlProxy(XmlStorableObject):
|
||||||
}
|
}
|
||||||
excluded_fields = ['id', 'object_type', 'object_id']
|
excluded_fields = ['id', 'object_type', 'object_id']
|
||||||
extra_fields = [
|
extra_fields = [
|
||||||
('workflow_tests', 'workflow_tests'),
|
|
||||||
('_webservice_responses', 'webservice_responses'),
|
('_webservice_responses', 'webservice_responses'),
|
||||||
|
('workflow_tests', 'workflow_tests'),
|
||||||
]
|
]
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
@ -674,6 +675,7 @@ class WebserviceResponse(XmlStorableObject):
|
||||||
_names = 'webservice-response'
|
_names = 'webservice-response'
|
||||||
xml_root_node = 'webservice-response'
|
xml_root_node = 'webservice-response'
|
||||||
|
|
||||||
|
uuid = None
|
||||||
testdef_id = None
|
testdef_id = None
|
||||||
name = ''
|
name = ''
|
||||||
payload = None
|
payload = None
|
||||||
|
@ -684,6 +686,7 @@ class WebserviceResponse(XmlStorableObject):
|
||||||
post_data = None
|
post_data = None
|
||||||
|
|
||||||
XML_NODES = [
|
XML_NODES = [
|
||||||
|
('uuid', 'str'),
|
||||||
('testdef_id', 'int'),
|
('testdef_id', 'int'),
|
||||||
('name', 'str'),
|
('name', 'str'),
|
||||||
('payload', 'str'),
|
('payload', 'str'),
|
||||||
|
@ -694,6 +697,10 @@ class WebserviceResponse(XmlStorableObject):
|
||||||
('post_data', 'kv_data'),
|
('post_data', 'kv_data'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
self.uuid = str(uuid.uuid4())
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ from wcs.qommon.form import (
|
||||||
)
|
)
|
||||||
from wcs.qommon.humantime import humanduration2seconds, seconds2humanduration, timewords
|
from wcs.qommon.humantime import humanduration2seconds, seconds2humanduration, timewords
|
||||||
from wcs.qommon.xml_storage import XmlStorableObject
|
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.backoffice_fields import SetBackofficeFieldRowWidget, SetBackofficeFieldsTableWidget
|
||||||
from wcs.wf.profile import FieldNode
|
from wcs.wf.profile import FieldNode
|
||||||
|
|
||||||
|
@ -661,20 +661,22 @@ class AssertWebserviceCall(WorkflowTestAction):
|
||||||
label = _('Assert webservice call')
|
label = _('Assert webservice call')
|
||||||
|
|
||||||
key = 'assert-webservice-call'
|
key = 'assert-webservice-call'
|
||||||
webservice_response_id = None
|
webservice_response_uuid = None
|
||||||
call_count = 1
|
call_count = 1
|
||||||
|
|
||||||
optional_fields = ['call_count']
|
optional_fields = ['call_count']
|
||||||
|
|
||||||
XML_NODES = WorkflowTestAction.XML_NODES + [
|
XML_NODES = WorkflowTestAction.XML_NODES + [
|
||||||
('webservice_response_id', 'str'),
|
('webservice_response_uuid', 'str'),
|
||||||
('call_count', 'int'),
|
('call_count', 'int'),
|
||||||
]
|
]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def details_label(self):
|
def details_label(self):
|
||||||
webservice_responses = [
|
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:
|
if webservice_responses:
|
||||||
return webservice_responses[0].name
|
return webservice_responses[0].name
|
||||||
|
@ -694,13 +696,17 @@ class AssertWebserviceCall(WorkflowTestAction):
|
||||||
|
|
||||||
def perform(self, formdata):
|
def perform(self, formdata):
|
||||||
try:
|
try:
|
||||||
response = WebserviceResponse.get(self.webservice_response_id)
|
response = [
|
||||||
except KeyError:
|
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'))
|
raise WorkflowTestError(_('Broken, missing webservice response'))
|
||||||
|
|
||||||
call_count = 0
|
call_count = 0
|
||||||
for used_response in formdata.used_webservice_responses.copy():
|
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)
|
formdata.used_webservice_responses.remove(used_response)
|
||||||
call_count += 1
|
call_count += 1
|
||||||
|
|
||||||
|
@ -712,7 +718,7 @@ class AssertWebserviceCall(WorkflowTestAction):
|
||||||
|
|
||||||
def fill_admin_form(self, form, formdef):
|
def fill_admin_form(self, form, formdef):
|
||||||
webservice_response_options = [
|
webservice_response_options = [
|
||||||
(response.id, response.name, response.id)
|
(response.uuid, response.name, response.uuid)
|
||||||
for response in self.parent.testdef.get_webservice_responses()
|
for response in self.parent.testdef.get_webservice_responses()
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -721,11 +727,11 @@ class AssertWebserviceCall(WorkflowTestAction):
|
||||||
|
|
||||||
form.add(
|
form.add(
|
||||||
SingleSelectWidget,
|
SingleSelectWidget,
|
||||||
'webservice_response_id',
|
'webservice_response_uuid',
|
||||||
title=_('Webservice response'),
|
title=_('Webservice response'),
|
||||||
options=webservice_response_options,
|
options=webservice_response_options,
|
||||||
required=True,
|
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)
|
form.add(IntWidget, 'call_count', title=_('Call count'), required=True, value=self.call_count)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue