dpark: convert soap errors to APIError (#76903)
gitea/passerelle/pipeline/head This commit looks good
Details
gitea/passerelle/pipeline/head This commit looks good
Details
This commit is contained in:
parent
fc9444cd98
commit
a20835e118
|
@ -192,7 +192,7 @@ def get_address_params(data):
|
|||
|
||||
|
||||
def get_service(instance):
|
||||
client = instance.soap_client()
|
||||
client = instance.soap_client(api_error=True)
|
||||
service_name = list(client.wsdl.services)[0]
|
||||
port_name = list(client.wsdl.services[service_name].ports)[0]
|
||||
binding_name = str(client.wsdl.services[service_name].ports[port_name].binding.name)
|
||||
|
|
|
@ -108,9 +108,14 @@ class SOAPClient(Client):
|
|||
)
|
||||
super().__init__(wsdl_url, transport=transport, **kwargs)
|
||||
|
||||
@property
|
||||
def service(self):
|
||||
service = super().service
|
||||
def bind(self, *args, **kwargs):
|
||||
service = super().bind(*args, **kwargs)
|
||||
if self.api_error:
|
||||
service.__class__ = ServiceProxyWrapper
|
||||
return service
|
||||
|
||||
def create_service(self, *args, **kwargs):
|
||||
service = super().create_service(*args, **kwargs)
|
||||
if self.api_error:
|
||||
service.__class__ = ServiceProxyWrapper
|
||||
return service
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
import base64
|
||||
import os
|
||||
import xml.etree.ElementTree as ET
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
import requests
|
||||
import responses
|
||||
from django.utils.encoding import force_str
|
||||
|
||||
from passerelle.contrib.dpark.models import DPark, Pairing
|
||||
from passerelle.utils.conversion import to_pdf
|
||||
from passerelle.utils.jsonresponse import APIError
|
||||
from passerelle.utils.soap import SOAPError
|
||||
from tests.utils import ResponsesSoap, make_resource
|
||||
|
||||
SLUG = 'test'
|
||||
|
@ -23,27 +23,6 @@ with open(os.path.join(os.path.dirname(__file__), 'data/small.jpg'), 'rb') as f:
|
|||
JPEG_CONTENT = f.read()
|
||||
|
||||
|
||||
def make_response(name, items):
|
||||
base = '''<?xml version="1.0" encoding="utf-8"?>
|
||||
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<SOAP-ENV:Header/>
|
||||
<SOAP-ENV:Body>
|
||||
</SOAP-ENV:Body>
|
||||
</SOAP-ENV:Envelope>'''
|
||||
root = ET.fromstring(base)
|
||||
body = root.find('{http://schemas.xmlsoap.org/soap/envelope/}Body')
|
||||
response_tag_name = '{urn:Webservice_Residants}PLS_%sResponse' % name
|
||||
result_tag_name = 'PLS_%sResult' % name
|
||||
response = ET.SubElement(body, response_tag_name)
|
||||
result = ET.SubElement(response, result_tag_name)
|
||||
for key, value in items:
|
||||
elt = ET.SubElement(result, key)
|
||||
if value:
|
||||
elt.text = value
|
||||
return ET.tostring(root)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def dpark(db):
|
||||
resource = make_resource(
|
||||
|
@ -94,10 +73,23 @@ def get_service():
|
|||
yield get_service
|
||||
|
||||
|
||||
def test_call_service_error(dpark, app, get_service):
|
||||
get_service.return_value = MockedService(error_class=SOAPError('boom!'))
|
||||
@responses.activate
|
||||
def test_call_service_error(dpark, app):
|
||||
responses.add(responses.GET, WSDL_URL, body=WSDL_CONTENT.encode())
|
||||
responses.add(responses.POST, SERVICE_URL, body=requests.ConnectionError())
|
||||
resp = app.get('/dpark/test/ping/')
|
||||
assert 'boom!' in resp.json['err_desc']
|
||||
assert 'is unreachable' in resp.json['err_desc']
|
||||
soap_fault = '''<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soap:Body>
|
||||
<soap:Fault>
|
||||
<faultcode>soap:Client</faultcode>
|
||||
<faultstring>Unmarshalling Error: Not a number: abc </faultstring>
|
||||
</soap:Fault>
|
||||
</soap:Body>
|
||||
</soap:Envelope>'''
|
||||
responses.add(responses.POST, SERVICE_URL, body=soap_fault.encode())
|
||||
resp = app.get('/dpark/test/ping/')
|
||||
assert 'Unmarshalling' in resp.json['err_desc']
|
||||
|
||||
|
||||
def test_ping(dpark, app, get_service):
|
||||
|
|
Loading…
Reference in New Issue