cartads: handle notification of errors (#32941)

This commit is contained in:
Frédéric Péters 2019-05-09 15:18:25 +02:00
parent 6ef50ecab0
commit 2f93dffe76
2 changed files with 60 additions and 4 deletions

View File

@ -415,10 +415,11 @@ class AbstractCartaDSCS(BaseResource):
signer = Signer(salt='cart@ds_cs/dossier')
dossier_id = signer.unsign(signed_dossier_id)
dossier = CartaDSDossier.objects.get(id=dossier_id)
dossier.notification_message = request.body
notification = etree.fromstring(request.POST['notification'])
dossier.cartads_id_dossier = notification.find('InformationsComplementaires/IdDossierCartads').text
dossier.cartads_numero_dossier = notification.find('InformationsComplementaires/NumeroDossier').text
dossier.notification_message = request.POST['notification']
notification = etree.fromstring(dossier.notification_message.encode('utf-8'))
if notification.find('Succes').text == 'true':
dossier.cartads_id_dossier = notification.find('InformationsComplementaires/IdDossierCartads').text
dossier.cartads_numero_dossier = notification.find('InformationsComplementaires/NumeroDossier').text
dossier.save()
return HttpResponse('ok', content_type='text/plain')
@ -445,6 +446,11 @@ class AbstractCartaDSCS(BaseResource):
extra = {}
for key in steps[-1]:
extra[key] = steps[-1][key]
elif dossier.notification_message: # but not dossier id -> error
status_id = 'refused'
notification = etree.fromstring(dossier.notification_message.encode('utf-8'))
error = notification.find('InformationsComplementaires/MessageErreur').text
status_label = _('File refused (%s)') % error
elif dossier.zip_sent:
status_id = 'zip-sent'
status_label = _('File sent')

View File

@ -199,6 +199,47 @@ def test_send(connector, app):
assert dossier.cartads_id_dossier == '135792'
assert dossier.cartads_numero_dossier == 'CU 044 043 19 A0006'
def test_send_notification_error(connector, app):
CartaDSFile.objects.all().delete()
Job.objects.all().delete()
test_pieces_management(connector, app)
resp = app.get('/cartads-cs/test/send?commune_id=1&type_dossier_id=CU&objet_demande_id=1&tracking_code=BBBBBBBB&email=test@invalid')
assert CartaDSDossier.objects.all().count() == 1
dossier = CartaDSDossier.objects.all().first()
assert resp.json['dossier_id'] == dossier.id
assert Job.objects.all().count() == 1
# test_pack
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
client.return_value = mock.Mock(service=FakeService())
with mock.patch('passerelle.apps.cartads_cs.models.FTP') as FTP:
connector.jobs()
assert Job.objects.filter(method_name='pack', status='completed').count()
assert Job.objects.filter(method_name='send_to_cartads', status='completed').count()
dossier = CartaDSDossier.objects.get(id=dossier.id)
assert dossier.zip_ack_response == 'True'
resp = app.post(dossier.notification_url, params={'notification': '''<?xml version="1.0" encoding="utf-8"?>
<Notification xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NomArchive>DJWQWLNZ.zip</NomArchive>
<DateDepot>2019-05-09T14:50:16.516718</DateDepot>
<EmailDemandeur>test@localhost</EmailDemandeur>
<Succes>false</Succes>
<InformationsComplementaires>
<Etape>ArchiveExtraite</Etape>
<MessageErreur>Le modèle sélectionné ne correspond à aucun Cerfa géré par l'application.</MessageErreur>
<IdDossierCartads />
<IdDossierExterne />
<NumeroDossier />
</InformationsComplementaires>
</Notification>'''})
dossier = CartaDSDossier.objects.get(id=dossier.id)
assert dossier.cartads_id_dossier is None
assert dossier.notification_message is not None
def test_status(connector, app):
CartaDSDossier.objects.all().delete()
test_send(connector, app)
@ -208,3 +249,12 @@ def test_status(connector, app):
client.return_value = mock.Mock(service=FakeService())
resp = app.get('/cartads-cs/test/status?dossier_id=%s' % dossier.id)
assert resp.json['status_label'] == 'En cours de saisie'
def test_status_error(connector, app):
CartaDSDossier.objects.all().delete()
test_send_notification_error(connector, app)
dossier = CartaDSDossier.objects.all()[0]
resp = app.get('/cartads-cs/test/status?dossier_id=%s' % dossier.id)
assert resp.json['status_label'] == u"File refused (Le modèle sélectionné ne correspond à aucun Cerfa géré par l'application.)"