toulouse-maelis: manage XML soap fault detail content (#73411)
gitea-wip/passerelle/pipeline/pr-main This commit looks good
Details
gitea-wip/passerelle/pipeline/pr-main This commit looks good
Details
This commit is contained in:
parent
47e0b644a5
commit
932907630b
|
@ -16,6 +16,7 @@
|
|||
|
||||
from urllib import parse as urlparse
|
||||
|
||||
from lxml import etree
|
||||
from requests import RequestException
|
||||
from zeep import Client
|
||||
from zeep.cache import InMemoryCache
|
||||
|
@ -48,6 +49,8 @@ class SOAPFault(SOAPError):
|
|||
log_error = False
|
||||
|
||||
def __init__(self, client, fault):
|
||||
if hasattr(fault, 'detail') and isinstance(fault.detail, etree._Element):
|
||||
fault.detail = etree.tostring(fault.detail).decode()
|
||||
super().__init__(
|
||||
f'SOAP service at {client.wsdl.location} returned an error "{fault.message or fault.code}"',
|
||||
data={
|
||||
|
|
|
@ -193,6 +193,15 @@ def test_call_with_wrong_credentials(family_service, con):
|
|||
'log_error': False,
|
||||
'http_status': 200,
|
||||
'err_code': 'Family-isWSRunning-ns1:FailedAuthentication',
|
||||
'data': {
|
||||
'soap_fault': {
|
||||
'message': 'The security token could not be authenticated or authorized',
|
||||
'code': 'ns1:FailedAuthentication',
|
||||
'actor': None,
|
||||
'detail': None,
|
||||
'subcodes': None,
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
@ -4421,11 +4430,32 @@ def test_read_school_list_address_and_level(site_service, con, app):
|
|||
|
||||
def test_read_school_list_address_and_level_soap_error(site_service, con, app):
|
||||
site_service.add_soap_response(
|
||||
'readSchoolForAdressAndLevel', get_xml_file('R_read_school_for_adress_and_level_soap_error.xml'), status=500,
|
||||
'readSchoolForAdressAndLevel',
|
||||
get_xml_file('R_read_school_for_adress_and_level_soap_error.xml'),
|
||||
status=500,
|
||||
)
|
||||
url = get_endpoint('read-schools-for-address-and-level')
|
||||
with pytest.raises(TypeError, match='Object of type _Element is not JSON serializable') as e:
|
||||
resp = app.get(url, params={'id_street': '', 'num': '', 'year': ''})
|
||||
resp = app.get(url, params={'id_street': '', 'num': '', 'year': ''})
|
||||
assert resp.json['err'] == 'Site-readSchoolForAdressAndLevel-soap:Server'
|
||||
assert (
|
||||
resp.json['err_desc']
|
||||
== 'SOAP service at https://example.org/SiteService?wsdl returned an error "E19 : La voie est obligatoire"'
|
||||
)
|
||||
assert resp.json['data'] == {
|
||||
'soap_fault': {
|
||||
'message': 'E19 : La voie est obligatoire',
|
||||
'code': 'soap:Server',
|
||||
'actor': None,
|
||||
'detail': '<detail xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'
|
||||
+ '\n <ns1:MaelisSiteException xmlns:ns1="site.ws.maelis.sigec.com">'
|
||||
+ '\n <message xmlns:ns2="site.ws.maelis.sigec.com">E19 : La voie est obligatoire</message>'
|
||||
+ '\n <code xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
|
||||
+ ' xmlns:ns2="site.ws.maelis.sigec.com" xsi:nil="true"/>'
|
||||
+ '\n </ns1:MaelisSiteException>\n </detail>'
|
||||
+ '\n ',
|
||||
'subcodes': None,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def test_read_school_list_child_and_level(family_service, con, app):
|
||||
|
|
Loading…
Reference in New Issue