atos-genesys: normalize webservice url before use (#32618)

All web-services exposed does not have the same prefix some are under the
path WSUsagerPublik/services/PublikService/ but those for intermediation
will be under WSIntermed/services/IntermediationService/. As we used the URL
with prefix included as base_url we must normalize it now
(remove prefix from base_url).
This commit is contained in:
Benjamin Dauvergne 2019-04-25 13:48:27 +02:00
parent 765166fa6d
commit 33f2a98e25
2 changed files with 22 additions and 5 deletions

View File

@ -40,9 +40,15 @@ class Resource(BaseResource, HTTPResource):
class Meta:
verbose_name = _('ATOS Genesys')
@property
def base_url(self):
if 'WSUsagerPublik' in self.webservice_base_url:
return self.webservice_base_url.split('WSUsagerPublik')[0]
return self.webservice_base_url
@property
def select_codifications_url(self):
return urlparse.urljoin(self.webservice_base_url, 'selectCodifications')
return urlparse.urljoin(self.base_url, 'WSUsagerPublik/services/PublikService/selectCodifications')
def xml_request(self, url, *args, **kwargs):
try:
@ -139,7 +145,7 @@ class Resource(BaseResource, HTTPResource):
@property
def select_appairage_url(self):
return urlparse.urljoin(self.webservice_base_url, 'selectAppairage')
return urlparse.urljoin(self.base_url, 'WSUsagerPublik/services/PublikService/selectAppairage')
def call_select_appairage(self, login, password, email):
row = self.xml_request(self.select_appairage_url, params={
@ -226,7 +232,7 @@ class Resource(BaseResource, HTTPResource):
@property
def select_usager_url(self):
return urlparse.urljoin(self.webservice_base_url, 'selectUsager')
return urlparse.urljoin(self.base_url, 'WSUsagerPublik/services/PublikService/selectUsager')
def call_select_usager(self, id_per):
row = self.xml_request(self.select_usager_url, params={

View File

@ -9,7 +9,7 @@ from django.utils.http import urlencode
from passerelle.apps.atos_genesys.models import Resource, Link
FAKE_URL = 'https://sirus.fr/genesys/'
FAKE_URL = 'https://sirus.fr/'
@pytest.fixture
@ -28,10 +28,21 @@ def mock_codifications_ok():
os.path.dirname(__file__),
'data',
'genesys_select_codifications.xml')).read()
with utils.mock_url(FAKE_URL + 'selectCodifications', response) as mock:
with utils.mock_url(FAKE_URL, response) as mock:
yield mock
def test_base_url_normalization(db):
# db is necessary because Resource.__init__ set resource.logger which does DB queries :/
resource = Resource(title='t', slug='t', description='t')
resource.webservice_base_url = 'http://localhost/WSUsagerPublik/services/PublikService/'
assert (resource.select_usager_by_ref_url
== 'http://localhost/WSUsagerPublik/services/PublikService/selectUsagerByRef')
resource.webservice_base_url = 'http://localhost/'
assert (resource.select_usager_by_ref_url
== 'http://localhost/WSUsagerPublik/services/PublikService/selectUsagerByRef')
def test_ws_categories(app, genesys, mock_codifications_ok):
url = utils.generic_endpoint_url('atos-genesys', 'codifications', slug=genesys.slug)
response = app.get(url)