Projet

Général

Profil

0002-iparapheur-add-permission-to-endpoints.patch

Josué Kouka, 09 septembre 2016 16:35

Télécharger (6,57 ko)

Voir les différences:

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(-)
passerelle/contrib/iparapheur/models.py
85 85
            raise InvalidResponseContent('Invalid Response Content, XML expected')
86 86
        return result
87 87

  
88
    @endpoint(serializer_type='json-api')
88
    @endpoint(serializer_type='json-api', perm='can_access')
89 89
    def types(self, request):
90 90
        return [format_type(t) for t in self.call('GetListeTypes')]
91 91

  
92
    @endpoint(serializer_type='json-api')
92
    @endpoint(serializer_type='json-api', perm='can_access')
93 93
    def ping(self, request):
94 94
        return self.call('echo', 'ping')
95 95

  
96
    @endpoint(serializer_type='json-api')
96
    @endpoint(serializer_type='json-api', perm='can_access')
97 97
    def subtypes(self, request, type=None):
98 98
        if type:
99 99
            return [format_type(t) for t in self.call('GetListeSousTypes', type)]
100 100
        return [format_type(t) for t in self.call('GetListeSousTypes')]
101 101

  
102
    @endpoint(serializer_type='json-api')
102
    @endpoint(serializer_type='json-api', perm='can_access')
103 103
    def files(self, status=None):
104 104
        if status:
105 105
            return [format_status(f) for f in self.call('RechercherDossiers', Status=status)]
106 106
        return [format_status(f) for f in self.call('RechercherDossiers')]
107 107

  
108
    @endpoint(serializer_type='json-api', name='create-file', methods=['post'])
108
    @endpoint(serializer_type='json-api', name='create-file', methods=['post'], perm='can_access')
109 109
    def create_file(self, request, email=None):
110 110
        data = json.loads(request.body)
111 111
        title = data['title']
......
139 139
        return {'RecordId': r.DossierID,
140 140
                'message': r.MessageRetour.message}
141 141

  
142
    @endpoint(serializer_type='json-api', name='get-file', pattern='(?P<file_id>[\w-]+)')
142
    @endpoint(serializer_type='json-api', name='get-file', pattern='(?P<file_id>[\w-]+)', perm='can_access')
143 143
    def get_file(self, request, file_id):
144 144
        resp = self.call('GetDossier', file_id)
145 145
        if resp.MessageRetour.codeRetour == 'KO':
......
151 151
        return HttpResponse(base64.b64decode(fichier['value']),
152 152
                content_type=fichier['_contentType'])
153 153

  
154
    @endpoint(serializer_type='json-api', name='get-file-status', pattern='(?P<file_id>[\w-]+)')
154
    @endpoint(serializer_type='json-api', name='get-file-status', pattern='(?P<file_id>[\w-]+)', perm='can_access')
155 155
    def get_file_status(self, request, file_id):
156 156
        resp = self.call('GetHistoDossier', file_id)
157 157
        if resp.MessageRetour.codeRetour == 'KO':
tests/test_iparapheur.py
1 1
# -*- coding: utf-8 -*-
2

  
2
import utils
3 3
import pytest
4 4
import mock
5 5
import uuid
......
43 43
                    resource_pk=conn.pk)
44 44
    return app, conn
45 45

  
46

  
47
def get_url(endpoint, rest=''):
48
    url = utils.generic_endpoint_url('iparapheur', endpoint, slug='parapheur')
49
    return '%s/%s?apikey=%s' % (url, rest, API_KEY)
50

  
51

  
46 52
@pytest.fixture
47 53
def xmlmime():
48 54
    return os.path.join(os.path.dirname(__file__), 'data','xmlmime.xml')
......
58 64
    service.echo.return_value = 'pong'
59 65
    mocked_client = mock.Mock(service=service)
60 66
    client.return_value = mocked_client
61
    resp = app.get(reverse('generic-endpoint', kwargs={'connector': 'iparapheur',
62
                            'endpoint': 'ping', 'slug': conn.slug}))
67
    url = get_url('ping')
68
    resp = app.get(url)
63 69
    assert resp.json['data'] == 'pong'
64 70

  
65 71
@mock.patch('passerelle.utils.LoggedRequest.get')
......
91 97
        mocked_post.return_value = mock.Mock(status_code=200,
92 98
                                             content=soap_response)
93 99

  
94
        url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur',
95
                                'endpoint': 'create-file', 'slug': conn.slug})
100
        url = get_url('create-file')
96 101
        resp = app.post_json(url, data)
97 102
        # check output call args
98 103
        assert (BASE_URL,) == mocked_post.call_args[0]
......
119 124
    mocked_get.return_value = mock.Mock(content = file(wsdl_file).read(),
120 125
                                            status_code=200)
121 126
    mocked_post.return_value = mock.Mock(status_code=200, content=soap_response)
122
    url = reverse('generic-endpoint', kwargs={'connector': 'iparapheur',
123
                                'endpoint': 'get-file-status', 'slug': conn.slug,
124
                                'rest': file_id})
127

  
128
    url = get_url('get-file-status', rest=file_id)
125 129
    resp = app.get(url)
126 130

  
127 131
    assert len(resp.json) == 2
......
147 151
                                            status_code=200)
148 152
    mocked_post.return_value = mock.Mock(status_code=200, content=soap_response)
149 153

  
150
    url = reverse('generic-endpoint', kwargs={'slug': conn.slug,
151
                'connector': 'iparapheur', 'endpoint': 'get-file',
152
                'rest': file_id})
154
    url = get_url('get-file', rest=file_id)
155

  
153 156
    resp = app.get(url)
154 157
    file_sent = os.path.join(os.path.dirname(__file__), 'data/iparapheur_test.pdf')
155 158
    assert resp.headers['Content-Type'] == 'application/pdf'
......
168 171
                                            status_code=200)
169 172
    mocked_post.return_value = mock.Mock(status_code=502,
170 173
            content='<p>Bad Gateway</p>', reason='Bad Gateway', ok=False)
171
    url = reverse('generic-endpoint', kwargs={'slug': conn.slug,
172
                'connector': 'iparapheur', 'endpoint': 'get-file-status',
173
                'rest': file_id})
174

  
175
    url = get_url('get-file-status', rest=file_id)
174 176
    resp = app.get(url)
175 177

  
176 178
    assert 'x-error-code' in dict(resp.headers)
177
-