diff --git a/tests/test_workflows.py b/tests/test_workflows.py index c2880f5..070e17d 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -927,6 +927,9 @@ def test_webservice_call_error_handling(pub): item.url = 'http://remote.example.net/json-err1' item.post = False item.action_on_app_error = ':stop' + item.action_on_4xx = ':pass' + item.action_on_5xx = ':pass' + item.action_on_network_errors = ':pass' with pytest.raises(AbortActionException): item.perform(formdata) @@ -934,6 +937,19 @@ def test_webservice_call_error_handling(pub): item.url = 'http://remote.example.net/json-errheader1' item.post = False item.action_on_app_error = ':stop' + item.action_on_4xx = ':pass' + item.action_on_5xx = ':pass' + item.action_on_network_errors = ':pass' + with pytest.raises(AbortActionException): + item.perform(formdata) + + item = WebserviceCallStatusItem() + item.url = 'http://remote.example.net/json-errheaderstr' + item.post = False + item.action_on_app_error = ':stop' + item.action_on_4xx = ':pass' + item.action_on_5xx = ':pass' + item.action_on_network_errors = ':pass' with pytest.raises(AbortActionException): item.perform(formdata) @@ -972,6 +988,17 @@ def test_webservice_call_error_handling(pub): formdata.workflow_data = None item = WebserviceCallStatusItem() + item.url = 'http://remote.example.net/json-errstr' + item.post = False + item.varname = 'xxx' + item.perform(formdata) + assert formdata.workflow_data['xxx_status'] == 200 + assert formdata.workflow_data['xxx_app_error_code'] == 'bug' + assert 'xxx_response' not in formdata.workflow_data + assert formdata.workflow_data.get('xxx_time') + formdata.workflow_data = None + + item = WebserviceCallStatusItem() item.url = 'http://remote.example.net/json-err1' item.post = False item.varname = 'xxx' @@ -1011,6 +1038,19 @@ def test_webservice_call_error_handling(pub): formdata.workflow_data = None item = WebserviceCallStatusItem() + item.url = 'http://remote.example.net/json-errheaderstr' + item.post = False + item.varname = 'xxx' + item.perform(formdata) + assert formdata.workflow_data['xxx_status'] == 200 + assert formdata.workflow_data['xxx_app_error_code'] == 'bug' + assert formdata.workflow_data['xxx_app_error_header'] == 'bug' + assert formdata.workflow_data['xxx_error_response'] == {'foo': 'bar'} + assert 'xxx_response' not in formdata.workflow_data + assert formdata.workflow_data.get('xxx_time') + formdata.workflow_data = None + + item = WebserviceCallStatusItem() item.url = 'http://remote.example.net/json-errheader1' item.post = False item.varname = 'xxx' @@ -1036,6 +1076,7 @@ def test_webservice_call_error_handling(pub): assert formdata.workflow_data.get('xxx_app_error_code') == 1 assert formdata.workflow_data.get('xxx_app_error_header') == '1' assert 'xxx_response' not in formdata.workflow_data + formdata.workflow_data = None item = WebserviceCallStatusItem() item.url = 'http://remote.example.net/xml-errheader' @@ -1050,6 +1091,37 @@ def test_webservice_call_error_handling(pub): assert formdata.workflow_data.get('xxx_app_error_code') == 1 assert formdata.workflow_data.get('xxx_app_error_header') == '1' assert 'xxx_response' not in formdata.workflow_data + formdata.workflow_data = None + + item = WebserviceCallStatusItem() + item.url = 'http://remote.example.net/xml-errheader' + item.post = False + item.varname = 'xxx' + item.response_type = 'json' # wait for json but receive xml + item.record_errors = True + item.perform(formdata) + assert formdata.workflow_data.get('xxx_status') == 200 + assert formdata.workflow_data.get('xxx_app_error_code') == 1 + assert formdata.workflow_data.get('xxx_app_error_header') == '1' + assert 'xxx_response' not in formdata.workflow_data + formdata.workflow_data = None + + item = WebserviceCallStatusItem() + item.url = 'http://remote.example.net/json-err1' + item.post = False + item.action_on_app_error = ':stop' + item.response_type = 'attachment' # err value is not an error + item.perform(formdata) # so, everything is "ok" here + formdata.workflow_data = None + + item = WebserviceCallStatusItem() + item.url = 'http://remote.example.net/json-errheaderstr' + item.post = False + item.action_on_app_error = ':stop' + item.response_type = 'attachment' + with pytest.raises(AbortActionException): + item.perform(formdata) + formdata.workflow_data = None def test_timeout(pub): workflow = Workflow(name='timeout') diff --git a/tests/utilities.py b/tests/utilities.py index f77bd39..50a6242 100644 --- a/tests/utilities.py +++ b/tests/utilities.py @@ -252,10 +252,13 @@ class HttpRequestsMocking(object): 'http://remote.example.net/json': (200, '{"foo": "bar"}', None), 'http://remote.example.net/json-err0': (200, '{"data": "foo", "err": 0}', None), 'http://remote.example.net/json-err1': (200, '{"data": "", "err": 1}', None), + 'http://remote.example.net/json-errstr': (200, '{"data": "", "err": "bug"}', None), 'http://remote.example.net/json-errheader0': (200, '{"foo": "bar"}', {'x-error-code': '0'}), 'http://remote.example.net/json-errheader1': (200, '{"foo": "bar"}', {'x-error-code': '1'}), + 'http://remote.example.net/json-errheaderstr': (200, '{"foo": "bar"}', + {'x-error-code': 'bug'}), 'http://remote.example.net/xml': (200, '', {'content-type': 'text/xml'}), 'http://remote.example.net/xml-errheader': (200, '',