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, '',