passerelle/tests/test_cartads_cs.py

211 lines
9.2 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_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'