atal: handle error when uploading big file (#76884)
gitea/passerelle/pipeline/head This commit looks good Details

This commit is contained in:
Emmanuel Cazenave 2023-04-24 14:17:45 +02:00
parent 0a6733f070
commit 822a0d83b4
2 changed files with 16 additions and 1 deletions

View File

@ -23,6 +23,7 @@ from django.db import models
from django.utils import dateformat, dateparse from django.utils import dateformat, dateparse
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from zeep import helpers from zeep import helpers
from zeep.exceptions import Fault
from passerelle.base.models import BaseResource from passerelle.base.models import BaseResource
from passerelle.utils.api import endpoint from passerelle.utils.api import endpoint
@ -286,7 +287,11 @@ class ATALConnector(BaseResource):
'numeroDemande': post_data['numero_demande'], 'numeroDemande': post_data['numero_demande'],
'nomFichier': filename, 'nomFichier': filename,
} }
self._soap_call(wsdl='ChargementPiecesJointesService', method='upload', **data) try:
self._soap_call(wsdl='ChargementPiecesJointesService', method='upload', **data)
except Fault as e:
raise APIError(str(e))
return {} return {}
@endpoint( @endpoint(

View File

@ -7,6 +7,7 @@ import pytest
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.utils.http import urlencode from django.utils.http import urlencode
from requests import RequestException from requests import RequestException
from zeep.exceptions import Fault
from passerelle.apps.atal.models import ATALConnector from passerelle.apps.atal.models import ATALConnector
from passerelle.base.models import AccessRight, ApiUser from passerelle.base.models import AccessRight, ApiUser
@ -189,6 +190,15 @@ def test_upload(app, connector, monkeypatch):
} }
def test_upload_file_too_big(app, connector, monkeypatch):
mock_atal_soap_call(monkeypatch, side_effect=Fault('File too big'))
base64_str = 'eyJsYXN0X2NoZWNrIjoiMjAxOS0wNC0xMFQxMjowODoyOVoiL' + 'CJweXBpX3ZlcnNpb24iOiIxOS4wLjMifQ=='
params = {'numero_demande': 'DIT19050001', 'nom_fichier': 'data.json', 'file': {'content': base64_str}}
response = app.post_json('/atal/slug-atal/upload', params=params)
assert response.json['err'] == 1
assert response.json['err_desc'] == 'File too big'
def test_retrieve_details_demande(app, connector, monkeypatch): def test_retrieve_details_demande(app, connector, monkeypatch):
import passerelle.utils import passerelle.utils