From 47487f083e2e9624c989ca30743cd018e22b72b4 Mon Sep 17 00:00:00 2001 From: Josue Kouka Date: Thu, 8 Sep 2016 15:36:07 +0200 Subject: [PATCH 2/3] iparapheur: add permission to endpoints --- passerelle/contrib/iparapheur/models.py | 14 +++++++------- tests/test_iparapheur.py | 30 ++++++++++++++++-------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/passerelle/contrib/iparapheur/models.py b/passerelle/contrib/iparapheur/models.py index 4c0a80e..7997de3 100644 --- a/passerelle/contrib/iparapheur/models.py +++ b/passerelle/contrib/iparapheur/models.py @@ -85,27 +85,27 @@ class IParapheur(BaseResource): raise InvalidResponseContent('Invalid Response Content, XML expected') return result - @endpoint(serializer_type='json-api') + @endpoint(serializer_type='json-api', perm='can_access') def types(self, request): return [format_type(t) for t in self.call('GetListeTypes')] - @endpoint(serializer_type='json-api') + @endpoint(serializer_type='json-api', perm='can_access') def ping(self, request): return self.call('echo', 'ping') - @endpoint(serializer_type='json-api') + @endpoint(serializer_type='json-api', perm='can_access') def subtypes(self, request, type=None): if type: return [format_type(t) for t in self.call('GetListeSousTypes', type)] return [format_type(t) for t in self.call('GetListeSousTypes')] - @endpoint(serializer_type='json-api') + @endpoint(serializer_type='json-api', perm='can_access') def files(self, status=None): if status: return [format_status(f) for f in self.call('RechercherDossiers', Status=status)] return [format_status(f) for f in self.call('RechercherDossiers')] - @endpoint(serializer_type='json-api', name='create-file', methods=['post']) + @endpoint(serializer_type='json-api', name='create-file', methods=['post'], perm='can_access') def create_file(self, request, email=None): data = json.loads(request.body) title = data['title'] @@ -139,7 +139,7 @@ class IParapheur(BaseResource): return {'RecordId': r.DossierID, 'message': r.MessageRetour.message} - @endpoint(serializer_type='json-api', name='get-file', pattern='(?P[\w-]+)') + @endpoint(serializer_type='json-api', name='get-file', pattern='(?P[\w-]+)', perm='can_access') def get_file(self, request, file_id): resp = self.call('GetDossier', file_id) if resp.MessageRetour.codeRetour == 'KO': @@ -151,7 +151,7 @@ class IParapheur(BaseResource): return HttpResponse(base64.b64decode(fichier['value']), content_type=fichier['_contentType']) - @endpoint(serializer_type='json-api', name='get-file-status', pattern='(?P[\w-]+)') + @endpoint(serializer_type='json-api', name='get-file-status', pattern='(?P[\w-]+)', perm='can_access') def get_file_status(self, request, file_id): resp = self.call('GetHistoDossier', file_id) if resp.MessageRetour.codeRetour == 'KO': diff --git a/tests/test_iparapheur.py b/tests/test_iparapheur.py index 1edb68d..e448adb 100644 --- a/tests/test_iparapheur.py +++ b/tests/test_iparapheur.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- - +import utils import pytest import mock import uuid @@ -43,6 +43,12 @@ def setup(): resource_pk=conn.pk) return app, conn + +def get_url(endpoint, rest=''): + url = utils.generic_endpoint_url('iparapheur', endpoint, slug='parapheur') + return '%s/%s?apikey=%s' % (url, rest, API_KEY) + + @pytest.fixture def xmlmime(): return os.path.join(os.path.dirname(__file__), 'data','xmlmime.xml') @@ -58,8 +64,8 @@ def test_call_ping(client, setup): service.echo.return_value = 'pong' mocked_client = mock.Mock(service=service) client.return_value = mocked_client - resp = app.get(reverse('generic-endpoint', kwargs={'connector': 'iparapheur', - 'endpoint': 'ping', 'slug': conn.slug})) + url = get_url('ping') + resp = app.get(url) assert resp.json['data'] == 'pong' @mock.patch('passerelle.utils.LoggedRequest.get') @@ -91,8 +97,7 @@ def test_create_file(http_open, mocked_post, mocked_get, setup, xmlmime, wsdl_fi mocked_post.return_value = mock.Mock(status_code=200, content=soap_response) - url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur', - 'endpoint': 'create-file', 'slug': conn.slug}) + url = get_url('create-file') resp = app.post_json(url, data) # check output call args assert (BASE_URL,) == mocked_post.call_args[0] @@ -119,9 +124,8 @@ def test_get_file_status(http_open, mocked_post, mocked_get, setup, xmlmime, wsd mocked_get.return_value = mock.Mock(content = file(wsdl_file).read(), status_code=200) mocked_post.return_value = mock.Mock(status_code=200, content=soap_response) - url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur', - 'endpoint': 'get-file-status', 'slug': conn.slug, - 'rest': file_id}) + + url = get_url('get-file-status', rest=file_id) resp = app.get(url) assert len(resp.json) == 2 @@ -147,9 +151,8 @@ def test_get_file(http_open, mocked_post, mocked_get, setup, xmlmime, wsdl_file) status_code=200) mocked_post.return_value = mock.Mock(status_code=200, content=soap_response) - url = reverse('generic-endpoint', kwargs={'slug': conn.slug, - 'connector': 'iparapheur', 'endpoint': 'get-file', - 'rest': file_id}) + url = get_url('get-file', rest=file_id) + resp = app.get(url) file_sent = os.path.join(os.path.dirname(__file__), 'data/iparapheur_test.pdf') assert resp.headers['Content-Type'] == 'application/pdf' @@ -168,9 +171,8 @@ def test_invalid_response(http_open, mocked_post, mocked_get, setup, xmlmime, ws status_code=200) mocked_post.return_value = mock.Mock(status_code=502, content='

Bad Gateway

', reason='Bad Gateway', ok=False) - url = reverse('generic-endpoint', kwargs={'slug': conn.slug, - 'connector': 'iparapheur', 'endpoint': 'get-file-status', - 'rest': file_id}) + + url = get_url('get-file-status', rest=file_id) resp = app.get(url) assert 'x-error-code' in dict(resp.headers) -- 2.9.3