cartads: handle notification of errors (#32941)
This commit is contained in:
parent
6ef50ecab0
commit
2f93dffe76
|
@ -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')
|
||||
|
|
|
@ -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.)"
|
||||
|
|
Loading…
Reference in New Issue