Projet

Général

Profil

0001-astre_rest-use-fichier-as-file-parameter-name-66598.patch

Emmanuel Cazenave, 24 juin 2022 17:11

Télécharger (4,9 ko)

Voir les différences:

Subject: [PATCH] astre_rest: use 'fichier' as file parameter name (#66598)

 passerelle/apps/astre_rest/models.py |  4 +--
 tests/test_astre_rest.py             | 46 ++++++++++++++++++++--------
 2 files changed, 36 insertions(+), 14 deletions(-)
passerelle/apps/astre_rest/models.py
382 382
                'astre/webservices/gf/documents/gedmanager/document/create/json',
383 383
                method='post',
384 384
                data=send_data,
385
                files={send_data['nomFichier']: base64.b64decode(post_data['file']['content'])},
385
                files={'fichier': base64.b64decode(post_data['file']['content'])},
386 386
            )
387 387
        }
388 388

  
......
451 451
                'astre/webservices/gf/documents/gedmanager/document/update/json',
452 452
                method='post',
453 453
                data=send_data,
454
                files={send_data['nomFichier']: base64.b64decode(post_data['file']['content'])},
454
                files={'fichier': base64.b64decode(post_data['file']['content'])},
455 455
            )
456 456
        }
457 457

  
tests/test_astre_rest.py
1 1
import base64
2
import cgi
3
import io
2 4
import json
3 5

  
4 6
import httmock
......
185 187
        'ged_ref': 'gedref',
186 188
        'doc_type': 'doctype',
187 189
        'description': 'description',
188
        'filename': 'filename',
190
        'filename': 'foo.bar',
189 191
        'indpj': 'indpj',
190 192
        'domain_code': 'domaincode',
191 193
    }
192 194

  
193 195
    resp = app.post_json('/astre-rest/slug-astre-rest/gf-documents-gedmanager-document-create', params=params)
194 196
    assert len(responses.calls) == 1
195
    assert responses.calls[0].request.headers['content-type'].startswith('multipart/form-data')
197
    made_request = responses.calls[0].request
198
    assert made_request.headers['content-type'].startswith('multipart/form-data')
199
    _, pdict = cgi.parse_header(made_request.headers["content-type"])
200
    pdict["boundary"] = bytes(pdict["boundary"], "utf-8")
201
    pdict['CONTENT-LENGTH'] = made_request.headers['Content-Length']
202
    postvars = cgi.parse_multipart(io.BytesIO(made_request.body), pdict)
203
    assert postvars['nomFichier'] == ['foo.bar']
204
    assert 'fichier' in postvars
205
    file_data = postvars['fichier'][0]
206
    assert file_data == 'aaaa'.encode('utf-8')
207

  
196 208
    json_resp = resp.json
197 209
    assert json_resp['err'] == 0
198 210
    assert json_resp['data'] == [{'foo': 'bar'}]
......
264 276
    assert json_resp['data'] == [{'foo': 'bar'}]
265 277

  
266 278

  
279
@responses.activate
267 280
def test_gf_documents_gedmanager_document_update(app, connector):
268
    @httmock.urlmatch(
269
        netloc='example.astre.net',
270
        path='/astre/webservices/gf/documents/gedmanager/document/update/json',
281
    responses.add(
282
        responses.POST,
283
        'http://example.astre.net/astre/webservices/gf/documents/gedmanager/document/update/json',
284
        json=[{'foo': 'bar'}],
285
        status=200,
271 286
    )
272
    def astre_mock(url, request):
273
        return httmock.response(200, content=[{'foo': 'bar'}])
274 287

  
275 288
    params = {
276 289
        'file': {
......
284 297
        'ged_ref': 'gedref',
285 298
        'doc_type': 'doctype',
286 299
        'description': 'description',
287
        'filename': 'filename',
300
        'filename': 'foo.bar',
288 301
        'indpj': 'indpj',
289 302
        'domain_code': 'domaincode',
290 303
    }
291 304

  
292
    with httmock.HTTMock(astre_mock):
293
        resp = app.post_json(
294
            '/astre-rest/slug-astre-rest/gf-documents-gedmanager-document-update', params=params
295
        )
305
    resp = app.post_json('/astre-rest/slug-astre-rest/gf-documents-gedmanager-document-update', params=params)
306
    assert len(responses.calls) == 1
307
    made_request = responses.calls[0].request
308
    assert made_request.headers['content-type'].startswith('multipart/form-data')
309
    _, pdict = cgi.parse_header(made_request.headers["content-type"])
310
    pdict["boundary"] = bytes(pdict["boundary"], "utf-8")
311
    pdict['CONTENT-LENGTH'] = made_request.headers['Content-Length']
312
    postvars = cgi.parse_multipart(io.BytesIO(made_request.body), pdict)
313
    assert postvars['nomFichier'] == ['foo.bar']
314
    assert 'fichier' in postvars
315
    file_data = postvars['fichier'][0]
316
    assert file_data == 'aaaa'.encode('utf-8')
317

  
296 318
    json_resp = resp.json
297 319
    assert json_resp['err'] == 0
298 320
    assert json_resp['data'] == [{'foo': 'bar'}]
299
-