From b6a71ff3a303b0994b54c256c86008951ea8df93 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 26 Sep 2019 22:37:55 +0200 Subject: [PATCH 1/3] tests: refactor mdel tests (#36471) - simplify loading of file fixtures - explode parametrized tests into many test functions --- .../mdel/{ActeEtatCivil-V1.A.xsd => aec.xsd} | 0 ...formdata_aec_deces.json => aec_deces.json} | 0 ...data_aec_mariage.json => aec_mariage.json} | 0 ...data_aec_naiss.json => aec_naissance.json} | 0 tests/data/mdel/aec_naissance_etranger.json | 131 +++++ tests/data/mdel/{formdata.json => ile.json} | 0 tests/data/mdel/{ILE_v1.1.xsd => ile.xsd} | 0 tests/test_mdel.py | 469 +++++++++--------- 8 files changed, 376 insertions(+), 224 deletions(-) rename tests/data/mdel/{ActeEtatCivil-V1.A.xsd => aec.xsd} (100%) rename tests/data/mdel/{formdata_aec_deces.json => aec_deces.json} (100%) rename tests/data/mdel/{formdata_aec_mariage.json => aec_mariage.json} (100%) rename tests/data/mdel/{formdata_aec_naiss.json => aec_naissance.json} (100%) create mode 100644 tests/data/mdel/aec_naissance_etranger.json rename tests/data/mdel/{formdata.json => ile.json} (100%) rename tests/data/mdel/{ILE_v1.1.xsd => ile.xsd} (100%) diff --git a/tests/data/mdel/ActeEtatCivil-V1.A.xsd b/tests/data/mdel/aec.xsd similarity index 100% rename from tests/data/mdel/ActeEtatCivil-V1.A.xsd rename to tests/data/mdel/aec.xsd diff --git a/tests/data/mdel/formdata_aec_deces.json b/tests/data/mdel/aec_deces.json similarity index 100% rename from tests/data/mdel/formdata_aec_deces.json rename to tests/data/mdel/aec_deces.json diff --git a/tests/data/mdel/formdata_aec_mariage.json b/tests/data/mdel/aec_mariage.json similarity index 100% rename from tests/data/mdel/formdata_aec_mariage.json rename to tests/data/mdel/aec_mariage.json diff --git a/tests/data/mdel/formdata_aec_naiss.json b/tests/data/mdel/aec_naissance.json similarity index 100% rename from tests/data/mdel/formdata_aec_naiss.json rename to tests/data/mdel/aec_naissance.json diff --git a/tests/data/mdel/aec_naissance_etranger.json b/tests/data/mdel/aec_naissance_etranger.json new file mode 100644 index 00000000..d1e5b2a0 --- /dev/null +++ b/tests/data/mdel/aec_naissance_etranger.json @@ -0,0 +1,131 @@ +{ + "criticality_level": 0, + "display_id": "1-4", + "display_name": "Demande d'un acte de naissance #15-4", + "evolution": [ + { + "status": "2", + "time": "2016-10-19T14:00:19Z", + "who": { + "email": "chelsea@whatever.com", + "id": "2", + "name": "chelsea" + } + } + ], + "extra": { + "aec_type": "Acte de naissance", + "aec_type_raw": "NAISSANCE", + "code_insee": "54395", + "code_postal": "54000", + "demand_type": "aec-la", + "ville": "Nancy", + "date_acte": "1958-05-19" + }, + "fields": { + "aec_nature": "Copie int\u00e9grale", + "aec_nature_raw": "COPIE-INTEGRALE", + "demandeur_adresse_etrangere_pays_raw": "Suisse", + "demandeur_adresse_etrangere": "4 rue des coquelicots, 3800 Bern", + "demandeur_civilite": "Madame", + "demandeur_civilite_raw": "Madame", + "demandeur_email": "chelsea@whatever.com", + "demandeur_nom": "Whatever", + "demandeur_prenom": "Chelsea", + "demandeur_telephone": "0122334455", + "motif_demande": "Certificat de nationalit\u00e9 fran\u00e7aise", + "motif_demande_raw": "CertificatDeNationaliteFrancaise", + "nombre_exemplaires": "2", + "qualite_demandeur": "Son fils ou sa fille", + "qualite_demandeur_autre": null, + "qualite_demandeur_raw": "Fils", + "titulaire_civilite": "Madame", + "titulaire_civilite_raw": "Madame", + "titulaire_mere_nom": "Song", + "titulaire_mere_prenoms": "Eloise", + "titulaire_naiss_date": "1958-05-19", + "titulaire_naiss_departement": "Meurthe et Moselle", + "titulaire_naiss_departement_raw": "54", + "titulaire_naiss_pays": "France", + "titulaire_naiss_pays_raw": "FRA", + "titulaire_naiss_ville": "Nancy", + "titulaire_naiss_ville_raw": "Nancy", + "titulaire_nationalite": "France", + "titulaire_nationalite_raw": "FRA", + "titulaire_nom": "Whatever", + "titulaire_pere_nom": "Whatever", + "titulaire_pere_prenoms": "Fritz", + "titulaire_prenoms": "Kim" + }, + "id": "demande-d-un-acte-de-naissance/4", + "last_update_time": "2016-10-19T14:00:19Z", + "receipt_time": "2016-10-19T14:00:19Z", + "roles": { + "_receiver": [ + { + "allows_backoffice_access": true, + "details": "", + "emails": [], + "emails_to_members": false, + "id": "22", + "name": "Etat civil Acte", + "slug": "etat-civil-acte", + "text": "Etat civil Acte" + } + ], + "actions": [ + { + "allows_backoffice_access": true, + "details": "", + "emails": [], + "emails_to_members": false, + "id": "3", + "name": "agent", + "slug": "agent", + "text": "agent" + } + ], + "concerned": [ + { + "allows_backoffice_access": true, + "details": "", + "emails": [], + "emails_to_members": false, + "id": "3", + "name": "agent", + "slug": "agent", + "text": "agent" + }, + { + "allows_backoffice_access": true, + "details": "", + "emails": [], + "emails_to_members": false, + "id": "22", + "name": "Etat civil Acte", + "slug": "etat-civil-acte", + "text": "Etat civil Acte" + } + ] + }, + "submission": { + "backoffice": false, + "channel": "web" + }, + "url": "http://wcs.debian.local/demande-d-un-acte-de-naissance/4/", + "user": { + "email": "chelsea@whatever.com", + "id": "2", + "name": "chelsea" + }, + "workflow": { + "fields": { + "aec_type": "Acte de naissance", + "aec_type_raw": "NAISSANCE" + }, + "status": { + "id": "2", + "name": "new" + } + } +} diff --git a/tests/data/mdel/formdata.json b/tests/data/mdel/ile.json similarity index 100% rename from tests/data/mdel/formdata.json rename to tests/data/mdel/ile.json diff --git a/tests/data/mdel/ILE_v1.1.xsd b/tests/data/mdel/ile.xsd similarity index 100% rename from tests/data/mdel/ILE_v1.1.xsd rename to tests/data/mdel/ile.xsd diff --git a/tests/test_mdel.py b/tests/test_mdel.py index 7ecb9228..c16b64a9 100644 --- a/tests/test_mdel.py +++ b/tests/test_mdel.py @@ -1,6 +1,6 @@ -# -*- coding: utf-8 -*- -# Passerelle - uniform access to data and services -# Copyright (C) 2015 Entr'ouvert +# coding: utf-8 +# passerelle - uniform access to data and services +# Copyright (C) 2019 Entr'ouvert # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU Affero General Public License as published @@ -14,6 +14,7 @@ # # You should have received a.deepcopy of the GNU Affero General Public License # along with this program. If not, see . + from __future__ import unicode_literals import shutil @@ -33,46 +34,43 @@ from passerelle.apps.mdel.utils import parse_date import utils -AEC_XSD = 'ActeEtatCivil-V1.A.xsd' -ILE_XSD = 'ILE_v1.1.xsd' - +data_dir = os.path.join(os.path.dirname(__file__), 'data', 'mdel') -def get_mdel_base_dir(): - return os.path.join(os.path.dirname(__file__), 'data', 'mdel') +def generate_json_fixture(path): + @pytest.fixture + def fixture(): + with open(path) as fd: + return json.load(fd) + return fixture -def get_file_from_test_base_dir(filename): - path = os.path.join(get_mdel_base_dir(), filename) - with open(path, 'rb') as fd: - return fd.read() +def generate_xsd_fixture(path): + @pytest.fixture + def fixture(): + def validate_schema(doc): + xsd = letree.parse(path).getroot() + schema = letree.XMLSchema(xsd) + parser = letree.XMLParser(schema=schema) + letree.parse(doc, parser=parser) # Will raise an exception if schema not respected + return validate_schema + return fixture -def validate_schema(doc, xsd): - xsd_path = os.path.join(get_mdel_base_dir(), xsd) - xsd = letree.parse(xsd_path).getroot() - schema = letree.XMLSchema(xsd) - parser = letree.XMLParser(schema=schema) - letree.parse(doc, parser=parser) # Will raise an exception if schema not respected +for filename in os.listdir(data_dir): + path = os.path.join(data_dir, filename) + name, ext = os.path.splitext(filename) + if ext == '.json': + globals()[name + '_payload'] = generate_json_fixture(path) + elif ext == '.xsd': + globals()[name + '_schema'] = generate_xsd_fixture(path) -@pytest.fixture -def setup(db): +@pytest.fixture(autouse=True) +def mdel(db): return utils.setup_access_rights(MDEL.objects.create(slug='test')) -@pytest.fixture(params=[ - json.loads(get_file_from_test_base_dir('formdata_aec_naiss.json')), - json.loads(get_file_from_test_base_dir('formdata_aec_mariage.json')), - json.loads(get_file_from_test_base_dir('formdata_aec_deces.json')), - ], ids=['naissance', 'mariage', 'deces']) -def aec_payload(request): - return request.param - - -ILE_PAYLOAD = json.loads(get_file_from_test_base_dir('formdata.json')) - - def test_message(): ns = {'mdel': 'http://finances.gouv.fr/dgme/pec/message/v1'} xmlns = 'http://finances.gouv.fr/dgme/gf/composants/teledemarchexml/donnee/metier' @@ -93,12 +91,10 @@ def test_message(): def test_description(): - attached_files = [ AttachedFile('JI', 'passport', base64.b64encode('this is passport')), AttachedFile('JD', 'energy_bill', base64.b64encode('this is edf_mai_2016')), ] - description = Description( 'ILE-LA', '77', '94600', attached_files=attached_files) xml = description.xml @@ -109,193 +105,218 @@ def test_description(): assert xml.find('Teledemarche/IdentifiantPlateforme').text == '1' -def test_invalid_demand_type(app, setup): - ILE_PAYLOAD_INVALID = copy.deepcopy(ILE_PAYLOAD) +def test_invalid_demand_type(app, ile_payload): + ILE_PAYLOAD_INVALID = copy.deepcopy(ile_payload) ILE_PAYLOAD_INVALID['extra']['demand_type'] = 'whatever' resp = app.post_json('/mdel/test/create', params=ILE_PAYLOAD_INVALID, status=200) assert resp.json['err_desc'] == "demand_type must be : ['ILE-LA', 'RCO-LA', 'AEC-LA']" -def test_invalid_demand_no_form_number(app, setup): - ILE_PAYLOAD_INVALID_NO = copy.deepcopy(ILE_PAYLOAD) +def test_invalid_demand_no_form_number(app, ile_payload): + ILE_PAYLOAD_INVALID_NO = copy.deepcopy(ile_payload) ILE_PAYLOAD_INVALID_NO.pop('display_id') resp = app.post_json('/mdel/test/create', params=ILE_PAYLOAD_INVALID_NO, status=200) assert resp.json['err_desc'] == "display_id is required" -def test_create_rco_demand_type(app, setup): - RCO_PAYLOAD = copy.deepcopy(ILE_PAYLOAD) +def test_unsupported_demand_type(app, ile_payload): + RCO_PAYLOAD = copy.deepcopy(ile_payload) RCO_PAYLOAD['extra']['demand_type'] = 'rco-la' resp = app.post_json('/mdel/test/create', params=RCO_PAYLOAD, status=200) assert resp.json['err_desc'] == "RCO-LA processing not implemented" -def test_create_aec_demand_type(app, setup, aec_payload): - resp = app.post_json('/mdel/test/create', params=aec_payload, status=200) - - if aec_payload['display_id'] == '15-4': - assert resp.json['data']['demand_id'] == '15-4-AEC-LA' - - doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '15-4-AEC-LA--0', '15-4-AEC-LA-doc-.xml') - validate_schema(doc, AEC_XSD) - - root = etree.parse(doc).getroot() - - assert root.tag == 'EnveloppeMetierType' - - # Generic tags - assert root.find('DemandeActe/TypeActe/Code').text == 'NAISSANCE' - assert root.find('DemandeActe/NatureActe/Code').text == 'COPIE-INTEGRALE' - assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'CertificatDeNationaliteFrancaise' - assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000' - assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395' - assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy' - assert root.find('DemandeActe/DateActe').text == '1958-05-19' - assert root.find('DemandeActe/NombreExemplaires').text == '2' - - # Requester - assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com' - assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME' - assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever' - assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea' - assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455' - assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Fils' - assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'Suisse' - assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text == '3ème, Bâtiment B, 37 rue de Paris, 3800 Bern' - - assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal') - assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville') - assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie') - - # Concerned - assert root.find('DemandeActe/Titulaire/Civilite').text == 'MADAME' - assert root.find('DemandeActe/Titulaire/Nationalite').text == 'FRA' - assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1958-05-19' - assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'FRA' - assert root.find('DemandeActe/Titulaire/DepartementDeNaissance').text == '54' - assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Whatever' - assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Kim' - assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Song' - assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Eloise' - assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Whatever' - assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Fritz' - - elif aec_payload['display_id'] == '16-1': - - assert resp.json['data']['demand_id'] == '16-1-AEC-LA' - - doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '16-1-AEC-LA--0', '16-1-AEC-LA-doc-.xml') - validate_schema(doc, AEC_XSD) - - root = etree.parse(doc).getroot() - - assert root.tag == 'EnveloppeMetierType' - - # Generic tags - assert root.find('DemandeActe/TypeActe/Code').text == 'MARIAGE' - assert root.find('DemandeActe/NatureActe/Code').text == 'EXTRAIT-AVEC-FILIATION' - assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'Autre' - assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000' - assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395' - assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy' - assert root.find('DemandeActe/DateActe').text == '2008-08-18' - assert root.find('DemandeActe/NombreExemplaires').text == '3' - - # Requester - assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com' - assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME' - assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever' - assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea' - assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455' - assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre' - assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Libelle').text == 'Sa soeur' - assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == '22 rue Danton' - assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '94270' - assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Kremlin Bicetre' - - # Concerned - assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR' - assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Whatever' - assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'PRK' - assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1978-05-19' - assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Josh' - assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Song' - assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Eloise' - assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Whatever' - assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Fritz' - - # Concerned2 - assert root.find('DemandeActe/Titulaire2/Civilite').text == 'MADAME' - assert root.find('DemandeActe/Titulaire2/NomNaissance').text == 'Kokey' - assert root.find('DemandeActe/Titulaire2/PaysDeNaissance').text == 'SEN' - assert root.find('DemandeActe/Titulaire2/DateDeNaissance').text == '1980-03-12' - assert root.find('DemandeActe/Titulaire2/Prenoms').text == 'Sarah' - assert root.find('DemandeActe/Titulaire2/Filiation/Mere/Nom').text == 'De' - assert root.find('DemandeActe/Titulaire2/Filiation/Mere/Prenoms').text == 'Coudy' - assert root.find('DemandeActe/Titulaire2/Filiation/Pere/Nom').text == 'Kokey' - assert root.find('DemandeActe/Titulaire2/Filiation/Pere/Prenoms').text == 'Pascal' - - else: - assert resp.json['data']['demand_id'] == '17-1-AEC-LA' - - doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '17-1-AEC-LA--0', '17-1-AEC-LA-doc-.xml') - validate_schema(doc, AEC_XSD) - - root = etree.parse(doc).getroot() - - assert root.tag == 'EnveloppeMetierType' - - # Generic tags - assert root.find('DemandeActe/TypeActe/Code').text == 'DECES' - assert root.find('DemandeActe/NatureActe/Code').text == 'COPIE-INTEGRALE' - assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'Autre' - assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000' - assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395' - assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy' - assert root.find('DemandeActe/DateActe').text == '2014-04-26' - assert root.find('DemandeActe/NombreExemplaires').text == '4' - - # Requester - assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com' - assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME' - assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever' - assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea' - assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455' - assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre' - assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '54000' - assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Nancy' - assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == "37 Rue de l'Aigle Blanc" - - assert not root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays') - assert not root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse') - - # Concerned - assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR' - assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Yamamoto' - assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'FRA' - assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1978-05-19' - assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Yosuke' - assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Ino' - assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Haruka' - assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Yamamoto' - assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Ryu' - - -def test_create_aec_demand_type_without_date_acte(app, setup): - payload = json.loads(get_file_from_test_base_dir('formdata_aec_deces.json')) - payload['fields'].pop('date_acte') - resp = app.post_json('/mdel/test/create', params=payload, status=200) +def test_aec_naissance(app, aec_schema, aec_naissance_payload): + resp = app.post_json('/mdel/test/create', params=aec_naissance_payload, status=200) + + assert resp.json['data']['demand_id'] == '15-4-AEC-LA' + + doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '15-4-AEC-LA--0', '15-4-AEC-LA-doc-.xml') + aec_schema(doc) + + root = etree.parse(doc).getroot() + + assert root.tag == 'EnveloppeMetierType' + + # Generic tags + assert root.find('DemandeActe/TypeActe/Code').text == 'NAISSANCE' + assert root.find('DemandeActe/NatureActe/Code').text == 'COPIE-INTEGRALE' + assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'CertificatDeNationaliteFrancaise' + assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000' + assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395' + assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy' + assert root.find('DemandeActe/DateActe').text == '1958-05-19' + assert root.find('DemandeActe/NombreExemplaires').text == '2' + + # Requester + assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com' + assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME' + assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever' + assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea' + assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455' + assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Fils' + assert root.find('DemandeActe/Demandeur/AdresseFrancaise') is None + assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'Suisse' + assert (root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text + == '3ème, Bâtiment B, 37 rue de Paris, 3800 Bern') + + assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal') + assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville') + assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie') + + # Concerned + assert root.find('DemandeActe/Titulaire/Civilite').text == 'MADAME' + assert root.find('DemandeActe/Titulaire/Nationalite').text == 'FRA' + assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1958-05-19' + assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'FRA' + assert root.find('DemandeActe/Titulaire/DepartementDeNaissance').text == '54' + assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Whatever' + assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Kim' + assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Song' + assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Eloise' + assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Whatever' + assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Fritz' + + +def test_aec_naissance_etranger(app, aec_schema, aec_naissance_etranger_payload): + resp = app.post_json('/mdel/test/create', params=aec_naissance_etranger_payload, status=200) + + assert resp.json['data']['demand_id'] == '1-4-AEC-LA' + + doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '1-4-AEC-LA--0', '1-4-AEC-LA-doc-.xml') + aec_schema(doc) + + root = etree.parse(doc).getroot() + + assert root.tag == 'EnveloppeMetierType' + + # Requester + assert root.find('DemandeActe/Demandeur/AdresseFrancaise') is None + assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'Suisse' + assert (root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text + == '4 rue des coquelicots, 3800 Bern') + + +def test_aec_mariage(app, aec_schema, aec_mariage_payload): + resp = app.post_json('/mdel/test/create', params=aec_mariage_payload, status=200) + + assert resp.json['data']['demand_id'] == '16-1-AEC-LA' + + doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '16-1-AEC-LA--0', '16-1-AEC-LA-doc-.xml') + + aec_schema(doc) + + root = etree.parse(doc).getroot() + + assert root.tag == 'EnveloppeMetierType' + + # Generic tags + assert root.find('DemandeActe/TypeActe/Code').text == 'MARIAGE' + assert root.find('DemandeActe/NatureActe/Code').text == 'EXTRAIT-AVEC-FILIATION' + assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'Autre' + assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000' + assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395' + assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy' + assert root.find('DemandeActe/DateActe').text == '2008-08-18' + assert root.find('DemandeActe/NombreExemplaires').text == '3' + + # Requester + assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com' + assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME' + assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever' + assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea' + assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455' + assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre' + assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Libelle').text == 'Sa soeur' + assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == '22 rue Danton' + assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '94270' + assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Kremlin Bicetre' + + # Concerned + assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR' + assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Whatever' + assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'PRK' + assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1978-05-19' + assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Josh' + assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Song' + assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Eloise' + assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Whatever' + assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Fritz' + + # Concerned2 + assert root.find('DemandeActe/Titulaire2/Civilite').text == 'MADAME' + assert root.find('DemandeActe/Titulaire2/NomNaissance').text == 'Kokey' + assert root.find('DemandeActe/Titulaire2/PaysDeNaissance').text == 'SEN' + assert root.find('DemandeActe/Titulaire2/DateDeNaissance').text == '1980-03-12' + assert root.find('DemandeActe/Titulaire2/Prenoms').text == 'Sarah' + assert root.find('DemandeActe/Titulaire2/Filiation/Mere/Nom').text == 'De' + assert root.find('DemandeActe/Titulaire2/Filiation/Mere/Prenoms').text == 'Coudy' + assert root.find('DemandeActe/Titulaire2/Filiation/Pere/Nom').text == 'Kokey' + assert root.find('DemandeActe/Titulaire2/Filiation/Pere/Prenoms').text == 'Pascal' + + +def test_aec_deces(app, aec_schema, aec_deces_payload): + resp = app.post_json('/mdel/test/create', params=aec_deces_payload, status=200) + + assert resp.json['data']['demand_id'] == '17-1-AEC-LA' + + doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '17-1-AEC-LA--0', '17-1-AEC-LA-doc-.xml') + aec_schema(doc) + + root = etree.parse(doc).getroot() + + assert root.tag == 'EnveloppeMetierType' + + # Generic tags + assert root.find('DemandeActe/TypeActe/Code').text == 'DECES' + assert root.find('DemandeActe/NatureActe/Code').text == 'COPIE-INTEGRALE' + assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'Autre' + assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000' + assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395' + assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy' + assert root.find('DemandeActe/DateActe').text == '2014-04-26' + assert root.find('DemandeActe/NombreExemplaires').text == '4' + + # Requester + assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com' + assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME' + assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever' + assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea' + assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455' + assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre' + assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '54000' + assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Nancy' + assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == "37 Rue de l'Aigle Blanc" + + assert not root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays') + assert not root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse') + + # Concerned + assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR' + assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Yamamoto' + assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'FRA' + assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1978-05-19' + assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Yosuke' + assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Ino' + assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Haruka' + assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Yamamoto' + assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Ryu' + + +def test_aec_without_date_acte(app, aec_deces_payload): + aec_deces_payload['fields'].pop('date_acte') + resp = app.post_json('/mdel/test/create', params=aec_deces_payload, status=200) assert resp.json['err_desc'] == ' is required' -def test_create_ile_demand_type(app, setup): - resp = app.post_json('/mdel/test/create', params=ILE_PAYLOAD, status=200) +def test_ile(app, ile_schema, ile_payload): + resp = app.post_json('/mdel/test/create', params=ile_payload, status=200) assert resp.json['data']['demand_id'] == '1-14-ILE-LA' base_doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '1-14-ILE-LA--0') doc = os.path.join(base_doc, '1-14-ILE-LA-doc-.xml') - validate_schema(doc, ILE_XSD) + ile_schema(doc) root = etree.parse(doc).getroot() @@ -334,7 +355,8 @@ def test_create_ile_demand_type(app, setup): assert root.find('ns2:Routage/ns2:Donnee/ns2:Valeur', namespaces=ns).text == '54395' assert root.find('ns2:Document/ns2:Code', namespaces=ns).text == '1-14-ILE-LA' assert root.find('ns2:Document/ns2:Nom', namespaces=ns).text == '1-14-ILE-LA' - assert root.find('ns2:Document/ns2:FichierFormulaire/ns2:FichierDonnees', namespaces=ns).text == '1-14-ILE-LA-doc-.xml' + assert (root.find('ns2:Document/ns2:FichierFormulaire/ns2:FichierDonnees', namespaces=ns).text + == '1-14-ILE-LA-doc-.xml') attached_files = root.findall('ns2:PieceJointe', namespaces=ns) assert len(attached_files) == 3 @@ -359,32 +381,31 @@ def test_create_ile_demand_type(app, setup): assert fname in expected_files # Without anterieur_situation_raw - payload = copy.deepcopy(ILE_PAYLOAD) + payload = copy.deepcopy(ile_payload) payload['fields'].pop('anterieur_situation_raw') resp = app.post_json('/mdel/test/create', params=payload, status=200) assert resp.json['err_desc'] == 'anterieur_situation_raw is required' -def test_create_ile_demand_type_invalid_document_proof(app, setup): +def test_ile_missing_key(app, ile_payload): # test with missing key - payload = json.loads(get_file_from_test_base_dir('formdata.json')) - payload['fields'].pop('justificatif_domicile_hebergeur') - resp = app.post_json('/mdel/test/create', params=payload, status=200) + ile_payload['fields'].pop('justificatif_domicile_hebergeur') + resp = app.post_json('/mdel/test/create', params=ile_payload, status=200) assert resp.json['err_desc'] == 'justificatif_domicile and all its attributes are required' - # test with invalid content - payload = json.loads(get_file_from_test_base_dir('formdata.json')) - payload['fields']['justificatif_identite'] = None - payload['fields']['justificatif_identite_verso'] = None - resp = app.post_json('/mdel/test/create', params=payload, status=200) + +def test_ile_invalid_value(app, ile_payload): + ile_payload['fields']['justificatif_identite'] = None + ile_payload['fields']['justificatif_identite_verso'] = None + resp = app.post_json('/mdel/test/create', params=ile_payload, status=200) assert resp.json['err_desc'] == 'justificatif_identite and all its attributes are required' -def test_get_status(app, setup): +def test_ile_get_status(app, mdel, ile_payload): shutil.copytree( - os.path.join(get_mdel_base_dir(), 'test', 'outputs'), + os.path.join(data_dir, 'test', 'outputs'), os.path.join(get_resource_base_dir(), 'test', 'outputs')) - resp = app.post_json('/mdel/test/create', params=ILE_PAYLOAD, status=200) + resp = app.post_json('/mdel/test/create', params=ile_payload, status=200) demand_id = resp.json['data']['demand_id'] assert demand_id == '1-14-ILE-LA' resp = app.get('/mdel/test/status', params={'demand_id': demand_id}) @@ -395,7 +416,7 @@ def test_get_status(app, setup): assert data['comment'] == 'Dossier traité.' assert Demand.objects.get(demand_id='1-14-ILE-LA').status == 'accepted' - Demand.objects.create(resource=setup, num='97-5', flow_type='AEC-LA', demand_id='97-5-AEC-LA') + Demand.objects.create(resource=mdel, num='97-5', flow_type='AEC-LA', demand_id='97-5-AEC-LA') resp = app.get('/mdel/test/status', params={'demand_id': '97-5-AEC-LA'}, status=200) data = resp.json['data'] @@ -405,7 +426,7 @@ def test_get_status(app, setup): assert data['comment'] == 'Le dossier a été reçu et sera traité prochainement.' assert Demand.objects.get(demand_id='97-5-AEC-LA').status == 'imported' - Demand.objects.create(resource=setup, num='102-2', flow_type='AEC-LA', demand_id='102-2-AEC-LA') + Demand.objects.create(resource=mdel, num='102-2', flow_type='AEC-LA', demand_id='102-2-AEC-LA') resp = app.get('/mdel/test/status', params={'demand_id': '102-2-AEC-LA'}, status=200) data = resp.json['data'] @@ -416,16 +437,16 @@ def test_get_status(app, setup): assert Demand.objects.get(demand_id='102-2-AEC-LA').status == 'accepted' -def test_get_status_unknown_demand(app, setup): +def test_get_status_unknown_demand(app): resp = app.get('/mdel/test/status', params={'demand_id': '1-14-ILE-LA'}, status=404) assert resp.json['err_desc'] == 'Demand matching query does not exist.' -def test_get_status_no_response(app, setup): +def test_get_status_no_response(app, mdel): shutil.copytree( - os.path.join(get_mdel_base_dir(), 'test', 'outputs'), + os.path.join(data_dir, 'test', 'outputs'), os.path.join(get_resource_base_dir(), 'test', 'outputs')) - Demand.objects.create(resource=setup, num='1-15', flow_type='ILE-LA', demand_id='1-15-ILE-LA') + Demand.objects.create(resource=mdel, num='1-15', flow_type='ILE-LA', demand_id='1-15-ILE-LA') resp = app.get('/mdel/test/status', params={'demand_id': '1-15-ILE-LA'}, status=200) data = resp.json['data'] @@ -436,11 +457,11 @@ def test_get_status_no_response(app, setup): assert Demand.objects.get(demand_id='1-15-ILE-LA').status is None -def test_get_not_closed_status(app, setup): +def test_get_not_closed_status(app, mdel): shutil.copytree( - os.path.join(get_mdel_base_dir(), 'test', 'outputs'), + os.path.join(data_dir, 'test', 'outputs'), os.path.join(get_resource_base_dir(), 'test', 'outputs')) - Demand.objects.create(resource=setup, num='15-9', flow_type='AEC-LA', demand_id='15-9-AEC-LA') + Demand.objects.create(resource=mdel, num='15-9', flow_type='AEC-LA', demand_id='15-9-AEC-LA') resp = app.get('/mdel/test/status', params={'demand_id': '15-9-AEC-LA'}, status=200) data = resp.json['data'] @@ -452,7 +473,7 @@ def test_get_not_closed_status(app, setup): assert Demand.objects.get(demand_id='15-9-AEC-LA').status == 'in progress' -def test_data_source_applicants(app, setup): +def test_data_source_applicants(app): resp = app.get('/mdel/test/applicants', status=200) data = resp.json['data'] assert len(data) == 9 @@ -464,7 +485,7 @@ def test_data_source_applicants(app, setup): assert len(data) == 7 -def test_data_source_certificates(app, setup): +def test_data_source_certificates(app): resp = app.get('/mdel/test/certificates', status=200) data = resp.json['data'] for datum in data: @@ -476,7 +497,7 @@ def test_data_source_certificates(app, setup): assert datum['text'] == 'Acte de décès' -def test_data_source_certificate_types(app, setup): +def test_data_source_certificate_types(app): resp = app.get('/mdel/test/certificate-types', status=200) data = resp.json['data'] assert len(data) == 4 -- 2.23.0