testdef: allow setting status code of webservice response (#87542)
gitea/wcs/pipeline/head This commit looks good
Details
gitea/wcs/pipeline/head This commit looks good
Details
This commit is contained in:
parent
d784acba07
commit
f418c515f5
|
@ -1369,6 +1369,7 @@ def test_tests_webservice_response(pub):
|
|||
resp = resp.click('Test response')
|
||||
resp.form['url'] = 'http://example.com/'
|
||||
resp.form['payload'] = '{"a": "b"}'
|
||||
resp.form['status_code'] = '400'
|
||||
resp.form['qs_data$element0key'] = 'foo'
|
||||
resp.form['method'] = 'POST (JSON)'
|
||||
resp.form['post_data$element0key'] = 'bar'
|
||||
|
@ -1381,6 +1382,7 @@ def test_tests_webservice_response(pub):
|
|||
assert response.name == 'Test response'
|
||||
assert response.url == 'http://example.com/'
|
||||
assert response.payload == '{"a": "b"}'
|
||||
assert response.status_code == 400
|
||||
assert response.qs_data == {'foo': ''}
|
||||
assert response.method == 'POST'
|
||||
assert response.post_data == {'bar': ''}
|
||||
|
|
|
@ -543,3 +543,53 @@ def test_workflow_tests_webservice(pub):
|
|||
with pytest.raises(WorkflowTestError) as excinfo:
|
||||
testdef.run(formdef)
|
||||
assert str(excinfo.value) == 'Webservice response Fake response was used 0 times (instead of 1).'
|
||||
|
||||
|
||||
def test_workflow_tests_webservice_status_jump(pub):
|
||||
user = pub.user_class(name='test user')
|
||||
user.store()
|
||||
|
||||
workflow = Workflow(name='Workflow One')
|
||||
new_status = workflow.add_status(name='New status')
|
||||
end_status = workflow.add_status(name='Error status')
|
||||
|
||||
wscall = new_status.add_action('webservice_call')
|
||||
wscall.url = 'http://example.com/json'
|
||||
wscall.varname = 'test_webservice'
|
||||
wscall.action_on_4xx = end_status.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.store()
|
||||
|
||||
response = WebserviceResponse()
|
||||
response.testdef_id = testdef.id
|
||||
response.name = 'Fake response'
|
||||
response.url = 'http://example.com/json'
|
||||
response.payload = '{"foo": "foo"}'
|
||||
response.store()
|
||||
|
||||
testdef.workflow_tests.actions = [
|
||||
workflow_tests.AssertStatus(status_name='New status'),
|
||||
workflow_tests.AssertWebserviceCall(webservice_response_id=response.id, call_count=1),
|
||||
]
|
||||
|
||||
testdef.run(formdef)
|
||||
|
||||
response.status_code = 400
|
||||
response.store()
|
||||
|
||||
testdef.workflow_tests.actions = [
|
||||
workflow_tests.AssertStatus(status_name='End status'),
|
||||
workflow_tests.AssertWebserviceCall(webservice_response_id=response.id, call_count=1),
|
||||
]
|
||||
|
|
|
@ -754,6 +754,16 @@ class WebserviceResponsePage(Directory):
|
|||
validation_function=validate_json,
|
||||
)
|
||||
|
||||
form.add(
|
||||
RadiobuttonsWidget,
|
||||
'status_code',
|
||||
title=_('Response status code'),
|
||||
required=True,
|
||||
options=[200, 204, 400, 401, 403, 404, 500, 502, 503],
|
||||
value=self.webservice_response.status_code,
|
||||
extra_css_class='widget-inline-radio',
|
||||
)
|
||||
|
||||
form.add(
|
||||
WidgetDict,
|
||||
'qs_data',
|
||||
|
@ -820,6 +830,7 @@ class WebserviceResponsePage(Directory):
|
|||
self.webservice_response.name = form.get_widget('name').parse()
|
||||
self.webservice_response.payload = form.get_widget('payload').parse()
|
||||
self.webservice_response.url = form.get_widget('url').parse()
|
||||
self.webservice_response.status_code = form.get_widget('status_code').parse()
|
||||
self.webservice_response.qs_data = form.get_widget('qs_data').parse()
|
||||
self.webservice_response.method = form.get_widget('method').parse()
|
||||
self.webservice_response.post_data = form.get_widget('post_data').parse()
|
||||
|
|
|
@ -640,7 +640,7 @@ class MockWebserviceResponseAdapter(requests.adapters.HTTPAdapter):
|
|||
}
|
||||
|
||||
raw_response = HTTPResponse(
|
||||
status=200,
|
||||
status=response.status_code,
|
||||
body=io.BytesIO(response.payload.encode()),
|
||||
headers=headers,
|
||||
original_response=self.make_original_response(headers),
|
||||
|
@ -669,6 +669,7 @@ class WebserviceResponse(XmlStorableObject):
|
|||
name = ''
|
||||
payload = None
|
||||
url = None
|
||||
status_code = 200
|
||||
qs_data = None
|
||||
method = ''
|
||||
post_data = None
|
||||
|
@ -678,6 +679,7 @@ class WebserviceResponse(XmlStorableObject):
|
|||
('name', 'str'),
|
||||
('payload', 'str'),
|
||||
('url', 'str'),
|
||||
('status_code', 'int'),
|
||||
('qs_data', 'kv_data'),
|
||||
('method', 'str'),
|
||||
('post_data', 'kv_data'),
|
||||
|
|
Loading…
Reference in New Issue