iparapheur: add a field to override endpoint location on wsdl (#30258)
This commit is contained in:
parent
00211a4cc8
commit
0b82a19d0c
|
@ -0,0 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.18 on 2019-03-12 17:32
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('iparapheur', '0006_use_http_resource'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='iparapheur',
|
||||
name='wsdl_endpoint_location',
|
||||
field=models.CharField(blank=True, help_text='override WSDL endpoint location', max_length=256, verbose_name='WSDL endpoint location'),
|
||||
),
|
||||
]
|
|
@ -33,7 +33,17 @@ from passerelle.utils.jsonresponse import APIError
|
|||
|
||||
def get_client(model):
|
||||
try:
|
||||
return model.soap_client()
|
||||
soap_client = model.soap_client()
|
||||
|
||||
# overrides the service port address URL defined in the WSDL.
|
||||
if model.wsdl_endpoint_location:
|
||||
soap_client.overridden_service = soap_client.create_service(
|
||||
# picks the first binding in the WSDL as the default
|
||||
soap_client.wsdl.bindings.keys()[0],
|
||||
model.wsdl_endpoint_location)
|
||||
else:
|
||||
soap_client.overridden_service = soap_client.service
|
||||
return soap_client
|
||||
except ConnectionError as exc:
|
||||
raise APIError('i-Parapheur error: %s' % exc)
|
||||
|
||||
|
@ -67,6 +77,9 @@ class IParapheur(BaseResource, HTTPResource):
|
|||
wsdl_url = models.CharField(max_length=128, blank=False,
|
||||
verbose_name=_('WSDL URL'),
|
||||
help_text=_('WSDL URL'))
|
||||
wsdl_endpoint_location = models.CharField(max_length=256, blank=True,
|
||||
verbose_name=_('WSDL endpoint location'),
|
||||
help_text=_('override WSDL endpoint location'))
|
||||
category = _('Business Process Connectors')
|
||||
|
||||
class Meta:
|
||||
|
@ -79,7 +92,7 @@ class IParapheur(BaseResource, HTTPResource):
|
|||
def call(self, service_name, *args, **kwargs):
|
||||
client = get_client(self)
|
||||
try:
|
||||
result = getattr(client.service, service_name)(*args, **kwargs)
|
||||
result = getattr(client.overridden_service, service_name)(*args, **kwargs)
|
||||
except WebFault as exc:
|
||||
# Remote Service Error: <SOAP-ENV:Fault> in response
|
||||
raise APIError('ServiceError: %s' % exc)
|
||||
|
@ -144,7 +157,7 @@ class IParapheur(BaseResource, HTTPResource):
|
|||
}
|
||||
if email:
|
||||
parameters['EmailEmetteur'] = email
|
||||
resp = soap_client.service.CreerDossier(**parameters)
|
||||
resp = soap_client.overridden_service.CreerDossier(**parameters)
|
||||
if not resp or not resp.MessageRetour:
|
||||
raise FileError('unknown error, no response')
|
||||
if resp.MessageRetour.codeRetour == 'KO':
|
||||
|
|
|
@ -70,7 +70,7 @@ def iph_mocked_get(url, params=None, **kwargs):
|
|||
def test_call_ping(soap_client, app, conn):
|
||||
service = mock.Mock()
|
||||
service.echo.return_value = 'pong'
|
||||
mocked_client = mock.Mock(service=service)
|
||||
mocked_client = mock.Mock(overridden_service=service)
|
||||
soap_client.return_value = mocked_client
|
||||
url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur',
|
||||
'endpoint': 'ping', 'slug': conn.slug})
|
||||
|
@ -541,3 +541,20 @@ def test_subtypes(mocked_post, mocked_get, app, conn):
|
|||
resp = app.get(url)
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['data'] == []
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get', side_effect=iph_mocked_get)
|
||||
@mock.patch('passerelle.utils.Request.post')
|
||||
def test_call_ping_overrinding_endpoint_url(mocked_post, mocked_get, app, conn):
|
||||
response = Response()
|
||||
response.status_code = 200
|
||||
soap_response = 'no importance'
|
||||
response._content = soap_response
|
||||
mocked_post.return_value = response
|
||||
|
||||
conn.wsdl_endpoint_location = 'http://www.new.location.com'
|
||||
conn.save()
|
||||
url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur',
|
||||
'endpoint': 'ping', 'slug': conn.slug})
|
||||
url += '?apikey=%s' % API_KEY
|
||||
app.get(url)
|
||||
assert mocked_post.call_args[0][0] == 'http://www.new.location.com'
|
||||
|
|
Loading…
Reference in New Issue