261 lines
11 KiB
Python
261 lines
11 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import datetime
|
|
|
|
import mock
|
|
import pytest
|
|
|
|
from django.core.files.storage import default_storage
|
|
|
|
from passerelle.apps.cartads_cs.models import CartaDSCS, CartaDSFile, CartaDSDossier
|
|
from passerelle.base.models import Job
|
|
|
|
from . import utils
|
|
|
|
@pytest.fixture
|
|
def connector(db):
|
|
return utils.make_resource(CartaDSCS,
|
|
title='Test',
|
|
slug='test',
|
|
description='...',
|
|
wsdl_base_url='http://test.invalid/adscs/webservices/',
|
|
username='test',
|
|
password='test',
|
|
iv='x'*16,
|
|
secret_key='y'*16,
|
|
ftp_server='ftp.invalid',
|
|
ftp_username='test',
|
|
ftp_password='test',
|
|
ftp_client_name='test'
|
|
)
|
|
|
|
|
|
class FakeService():
|
|
def GetCommunes(self, token):
|
|
return [{'Key': 2, 'Value': 'AIGREFEUILLE SUR MAINE'}]
|
|
|
|
def GetTypesDossier(self, token, commune_id):
|
|
return [{'Key': 'CU', 'Value': "Certificat d'urbanisme"}]
|
|
|
|
def GetObjetsDemande(self, token, type_dossier_id):
|
|
return [{'Key': 1, 'Value': "CU d'information"}]
|
|
|
|
def GetListePdf(self, token, type_dossier_id, options=None):
|
|
return [{'UrlTelechargement': 'https://invalid/adscs/webservices/ServicePDF.ashx?pdf=13410*04',
|
|
'Nom': 'Cerfa 13410-04',
|
|
'Description': "Demande de Certificat d'urbanisme",
|
|
'Identifiant': '13410*04'}]
|
|
|
|
def GetPieces(self, token, type_dossier_id, objet_demande_id):
|
|
return [{'IdPiece': 1065,
|
|
'Libelle': 'DECLARATION PREALABLE INCOMPLETE',
|
|
'CodePiece': 'CU',
|
|
'Descriptif': 'Complétez la rubrique',
|
|
'Reglementaire': False,
|
|
},
|
|
{'IdPiece': 1,
|
|
'Libelle': 'Plan de situation du terrain',
|
|
'CodePiece': 'CU01',
|
|
'Descriptif': 'Un plan de situation du terrain [Art. R. 410-1 al 1 du code de l\'urbanisme]',
|
|
'Reglementaire': True,
|
|
}
|
|
]
|
|
|
|
def NotifierDepotDossier(self, token, commune_id, type_dossier_id, filename, email, infos):
|
|
return 'True'
|
|
|
|
def GetEtapesDossier(self, token, dossier_id, infos):
|
|
return [{
|
|
'DateEcheance': datetime.datetime(2019, 3, 1, 0, 0),
|
|
'DateRealisation': None,
|
|
'DateReference': datetime.datetime(2019, 2, 14, 0, 0),
|
|
'IdDossier': 135792,
|
|
'IdEtape': 1,
|
|
'IdEtapeDossier': 692232,
|
|
'LibelleEtape': 'En cours de saisie'
|
|
}]
|
|
|
|
|
|
def test_communes(connector, app):
|
|
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
|
|
client.return_value = mock.Mock(service=FakeService())
|
|
resp = app.get('/cartads-cs/test/communes')
|
|
assert resp.json == {'data': [{'text': 'AIGREFEUILLE SUR MAINE', 'id': '2'}], 'err': 0}
|
|
|
|
def test_types_dossier(connector, app):
|
|
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
|
|
client.return_value = mock.Mock(service=FakeService())
|
|
resp = app.get('/cartads-cs/test/types_dossier', status=400)
|
|
resp = app.get('/cartads-cs/test/types_dossier?commune_id=1')
|
|
assert resp.json == {'data': [{'id': 'CU', 'text': "Certificat d'urbanisme"}], 'err': 0}
|
|
|
|
def test_objets_demande(connector, app):
|
|
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
|
|
client.return_value = mock.Mock(service=FakeService())
|
|
resp = app.get('/cartads-cs/test/objets_demande?type_dossier_id=CU')
|
|
assert resp.json == {'data': [{'id': '1', 'text': "CU d'information"}], 'err': 0}
|
|
|
|
def test_liste_pdf(connector, app):
|
|
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
|
|
client.return_value = mock.Mock(service=FakeService())
|
|
resp = app.get('/cartads-cs/test/liste_pdf?type_dossier_id=CU')
|
|
assert resp.json == {'data': [{'id': '13410*04',
|
|
'text': "Cerfa 13410-04: Demande de Certificat d'urbanisme",
|
|
'url': 'https://invalid/adscs/webservices/ServicePDF.ashx?pdf=13410*04'}],
|
|
'err': 0}
|
|
|
|
def test_pieces_management(connector, app):
|
|
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
|
|
client.return_value = mock.Mock(service=FakeService())
|
|
resp = app.get('/cartads-cs/test/pieces?type_dossier_id=CU&objet_demande_id=1&tracking_code=BBBBBBBB')
|
|
data = resp.json['data']
|
|
assert len(data) == 4
|
|
assert data[0]['text'] == 'Cerfa rempli'
|
|
assert data[0]['max_files'] == 1
|
|
assert data[1]['text'] == u'Cerfa demandeurs complémentaires'
|
|
assert data[1]['max_files'] == 6
|
|
assert data[2]['text'] == 'Plan de situation du terrain'
|
|
assert data[2]['max_files'] == 6
|
|
assert data[3]['text'] == 'DECLARATION PREALABLE INCOMPLETE'
|
|
assert data[3]['max_files'] == 6
|
|
for piece in data:
|
|
assert len(piece['files']) == 1
|
|
assert piece['files'][0].keys() == ['url']
|
|
|
|
resp = app.get('/cartads-cs/test/check_pieces?type_dossier_id=CU&objet_demande_id=1&tracking_code=BBBBBBBB')
|
|
assert resp.json == {'result': False, 'err': 0}
|
|
|
|
resp = app.post(data[0]['files'][0]['url'],
|
|
upload_files=[('files[]', 'test.pdf', '%PDF...')])
|
|
cerfa_token = resp.json[0]['token']
|
|
|
|
resp = app.get('/cartads-cs/test/pieces?type_dossier_id=CU&objet_demande_id=1&tracking_code=BBBBBBBB')
|
|
data = resp.json['data']
|
|
assert data[0]['files'][0]['name']
|
|
|
|
resp = app.post(data[0]['files'][0]['url'] + '%s/delete/' % cerfa_token)
|
|
assert resp.json == {'err': 0}
|
|
|
|
resp = app.get('/cartads-cs/test/pieces?type_dossier_id=CU&objet_demande_id=1&tracking_code=BBBBBBBB')
|
|
data = resp.json['data']
|
|
assert 'name' not in data[0]['files'][0]
|
|
|
|
resp = app.post(data[0]['files'][0]['url'],
|
|
upload_files=[('files[]', 'test.pdf', '%PDF...')])
|
|
|
|
resp = app.post(data[1]['files'][0]['url'],
|
|
upload_files=[('files[]', 'test.pdf', '%PDF...')])
|
|
resp = app.post(data[1]['files'][0]['url'],
|
|
upload_files=[('files[]', 'test.pdf', '%PDF...')])
|
|
resp = app.get('/cartads-cs/test/pieces?type_dossier_id=CU&objet_demande_id=1&tracking_code=BBBBBBBB')
|
|
data = resp.json['data']
|
|
assert len(data[1]['files']) == 3
|
|
|
|
resp = app.get('/cartads-cs/test/check_pieces?type_dossier_id=CU&objet_demande_id=1&tracking_code=BBBBBBBB')
|
|
assert resp.json == {'result': False, 'err': 0}
|
|
|
|
resp = app.post(data[2]['files'][0]['url'],
|
|
upload_files=[('files[]', 'test.pdf', '%PDF...')])
|
|
|
|
resp = app.get('/cartads-cs/test/check_pieces?type_dossier_id=CU&objet_demande_id=1&tracking_code=BBBBBBBB')
|
|
assert resp.json == {'result': True, 'err': 0}
|
|
|
|
def test_send(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>SKTJCMPD.zip</NomArchive>
|
|
<DateDepot>2019-02-14T00:00:00</DateDepot>
|
|
<EmailDemandeur>test@invalid</EmailDemandeur>
|
|
<Succes>true</Succes>
|
|
<InformationsComplementaires>
|
|
<Etape>PriseEnChargeAutoTerminee</Etape>
|
|
<MessageErreur />
|
|
<IdDossierCartads>135792</IdDossierCartads>
|
|
<NumeroDossier>CU 044 043 19 A0006</NumeroDossier>
|
|
</InformationsComplementaires>
|
|
</Notification>'''})
|
|
|
|
dossier = CartaDSDossier.objects.get(id=dossier.id)
|
|
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)
|
|
dossier = CartaDSDossier.objects.all()[0]
|
|
|
|
with mock.patch('passerelle.apps.cartads_cs.models.CartaDSCS.soap_client') as client:
|
|
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.)"
|