1 |
|
# -*- coding: utf-8 -*-
|
2 |
|
# Passerelle - uniform access to data and services
|
3 |
|
# Copyright (C) 2015 Entr'ouvert
|
|
1 |
# coding: utf-8
|
|
2 |
# passerelle - uniform access to data and services
|
|
3 |
# Copyright (C) 2019 Entr'ouvert
|
4 |
4 |
#
|
5 |
5 |
# This program is free software: you can redistribute it and/or modify it
|
6 |
6 |
# under the terms of the GNU Affero General Public License as published
|
... | ... | |
14 |
14 |
#
|
15 |
15 |
# You should have received a.deepcopy of the GNU Affero General Public License
|
16 |
16 |
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17 |
|
17 |
18 |
from __future__ import unicode_literals
|
18 |
19 |
|
19 |
20 |
import shutil
|
... | ... | |
33 |
34 |
|
34 |
35 |
import utils
|
35 |
36 |
|
36 |
|
AEC_XSD = 'ActeEtatCivil-V1.A.xsd'
|
37 |
|
ILE_XSD = 'ILE_v1.1.xsd'
|
38 |
|
|
|
37 |
data_dir = os.path.join(os.path.dirname(__file__), 'data', 'mdel')
|
39 |
38 |
|
40 |
|
def get_mdel_base_dir():
|
41 |
|
return os.path.join(os.path.dirname(__file__), 'data', 'mdel')
|
42 |
39 |
|
|
40 |
def generate_json_fixture(path):
|
|
41 |
@pytest.fixture
|
|
42 |
def fixture():
|
|
43 |
with open(path) as fd:
|
|
44 |
return json.load(fd)
|
|
45 |
return fixture
|
43 |
46 |
|
44 |
|
def get_file_from_test_base_dir(filename):
|
45 |
|
path = os.path.join(get_mdel_base_dir(), filename)
|
46 |
|
with open(path, 'rb') as fd:
|
47 |
|
return fd.read()
|
48 |
47 |
|
|
48 |
def generate_xsd_fixture(path):
|
|
49 |
@pytest.fixture
|
|
50 |
def fixture():
|
|
51 |
def validate_schema(doc):
|
|
52 |
xsd = letree.parse(path).getroot()
|
|
53 |
schema = letree.XMLSchema(xsd)
|
|
54 |
parser = letree.XMLParser(schema=schema)
|
|
55 |
letree.parse(doc, parser=parser) # Will raise an exception if schema not respected
|
|
56 |
return validate_schema
|
|
57 |
return fixture
|
49 |
58 |
|
50 |
|
def validate_schema(doc, xsd):
|
51 |
|
xsd_path = os.path.join(get_mdel_base_dir(), xsd)
|
52 |
|
xsd = letree.parse(xsd_path).getroot()
|
53 |
|
schema = letree.XMLSchema(xsd)
|
54 |
|
parser = letree.XMLParser(schema=schema)
|
55 |
|
letree.parse(doc, parser=parser) # Will raise an exception if schema not respected
|
56 |
59 |
|
|
60 |
for filename in os.listdir(data_dir):
|
|
61 |
path = os.path.join(data_dir, filename)
|
|
62 |
name, ext = os.path.splitext(filename)
|
|
63 |
if ext == '.json':
|
|
64 |
globals()[name + '_payload'] = generate_json_fixture(path)
|
|
65 |
elif ext == '.xsd':
|
|
66 |
globals()[name + '_schema'] = generate_xsd_fixture(path)
|
57 |
67 |
|
58 |
68 |
|
59 |
|
@pytest.fixture
|
60 |
|
def setup(db):
|
|
69 |
@pytest.fixture(autouse=True)
|
|
70 |
def mdel(db):
|
61 |
71 |
return utils.setup_access_rights(MDEL.objects.create(slug='test'))
|
62 |
72 |
|
63 |
73 |
|
64 |
|
@pytest.fixture(params=[
|
65 |
|
json.loads(get_file_from_test_base_dir('formdata_aec_naiss.json')),
|
66 |
|
json.loads(get_file_from_test_base_dir('formdata_aec_mariage.json')),
|
67 |
|
json.loads(get_file_from_test_base_dir('formdata_aec_deces.json')),
|
68 |
|
], ids=['naissance', 'mariage', 'deces'])
|
69 |
|
def aec_payload(request):
|
70 |
|
return request.param
|
71 |
|
|
72 |
|
|
73 |
|
ILE_PAYLOAD = json.loads(get_file_from_test_base_dir('formdata.json'))
|
74 |
|
|
75 |
|
|
76 |
74 |
def test_message():
|
77 |
75 |
ns = {'mdel': 'http://finances.gouv.fr/dgme/pec/message/v1'}
|
78 |
76 |
xmlns = 'http://finances.gouv.fr/dgme/gf/composants/teledemarchexml/donnee/metier'
|
... | ... | |
93 |
91 |
|
94 |
92 |
|
95 |
93 |
def test_description():
|
96 |
|
|
97 |
94 |
attached_files = [
|
98 |
95 |
AttachedFile('JI', 'passport', base64.b64encode('this is passport')),
|
99 |
96 |
AttachedFile('JD', 'energy_bill', base64.b64encode('this is edf_mai_2016')),
|
100 |
97 |
]
|
101 |
|
|
102 |
98 |
description = Description(
|
103 |
99 |
'ILE-LA', '77', '94600', attached_files=attached_files)
|
104 |
100 |
xml = description.xml
|
... | ... | |
109 |
105 |
assert xml.find('Teledemarche/IdentifiantPlateforme').text == '1'
|
110 |
106 |
|
111 |
107 |
|
112 |
|
def test_invalid_demand_type(app, setup):
|
113 |
|
ILE_PAYLOAD_INVALID = copy.deepcopy(ILE_PAYLOAD)
|
|
108 |
def test_invalid_demand_type(app, ile_payload):
|
|
109 |
ILE_PAYLOAD_INVALID = copy.deepcopy(ile_payload)
|
114 |
110 |
ILE_PAYLOAD_INVALID['extra']['demand_type'] = 'whatever'
|
115 |
111 |
resp = app.post_json('/mdel/test/create', params=ILE_PAYLOAD_INVALID, status=200)
|
116 |
112 |
assert resp.json['err_desc'] == "demand_type must be : ['ILE-LA', 'RCO-LA', 'AEC-LA']"
|
117 |
113 |
|
118 |
114 |
|
119 |
|
def test_invalid_demand_no_form_number(app, setup):
|
120 |
|
ILE_PAYLOAD_INVALID_NO = copy.deepcopy(ILE_PAYLOAD)
|
|
115 |
def test_invalid_demand_no_form_number(app, ile_payload):
|
|
116 |
ILE_PAYLOAD_INVALID_NO = copy.deepcopy(ile_payload)
|
121 |
117 |
ILE_PAYLOAD_INVALID_NO.pop('display_id')
|
122 |
118 |
resp = app.post_json('/mdel/test/create', params=ILE_PAYLOAD_INVALID_NO, status=200)
|
123 |
119 |
assert resp.json['err_desc'] == "display_id is required"
|
124 |
120 |
|
125 |
121 |
|
126 |
|
def test_create_rco_demand_type(app, setup):
|
127 |
|
RCO_PAYLOAD = copy.deepcopy(ILE_PAYLOAD)
|
|
122 |
def test_unsupported_demand_type(app, ile_payload):
|
|
123 |
RCO_PAYLOAD = copy.deepcopy(ile_payload)
|
128 |
124 |
RCO_PAYLOAD['extra']['demand_type'] = 'rco-la'
|
129 |
125 |
resp = app.post_json('/mdel/test/create', params=RCO_PAYLOAD, status=200)
|
130 |
126 |
assert resp.json['err_desc'] == "RCO-LA processing not implemented"
|
131 |
127 |
|
132 |
128 |
|
133 |
|
def test_create_aec_demand_type(app, setup, aec_payload):
|
134 |
|
resp = app.post_json('/mdel/test/create', params=aec_payload, status=200)
|
135 |
|
|
136 |
|
if aec_payload['display_id'] == '15-4':
|
137 |
|
assert resp.json['data']['demand_id'] == '15-4-AEC-LA'
|
138 |
|
|
139 |
|
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '15-4-AEC-LA--0', '15-4-AEC-LA-doc-.xml')
|
140 |
|
validate_schema(doc, AEC_XSD)
|
141 |
|
|
142 |
|
root = etree.parse(doc).getroot()
|
143 |
|
|
144 |
|
assert root.tag == 'EnveloppeMetierType'
|
145 |
|
|
146 |
|
# Generic tags
|
147 |
|
assert root.find('DemandeActe/TypeActe/Code').text == 'NAISSANCE'
|
148 |
|
assert root.find('DemandeActe/NatureActe/Code').text == 'COPIE-INTEGRALE'
|
149 |
|
assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'CertificatDeNationaliteFrancaise'
|
150 |
|
assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000'
|
151 |
|
assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395'
|
152 |
|
assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy'
|
153 |
|
assert root.find('DemandeActe/DateActe').text == '1958-05-19'
|
154 |
|
assert root.find('DemandeActe/NombreExemplaires').text == '2'
|
155 |
|
|
156 |
|
# Requester
|
157 |
|
assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com'
|
158 |
|
assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME'
|
159 |
|
assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever'
|
160 |
|
assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea'
|
161 |
|
assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455'
|
162 |
|
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Fils'
|
163 |
|
assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'Suisse'
|
164 |
|
assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text == '3ème, Bâtiment B, 37 rue de Paris, 3800 Bern'
|
165 |
|
|
166 |
|
assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal')
|
167 |
|
assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville')
|
168 |
|
assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie')
|
169 |
|
|
170 |
|
# Concerned
|
171 |
|
assert root.find('DemandeActe/Titulaire/Civilite').text == 'MADAME'
|
172 |
|
assert root.find('DemandeActe/Titulaire/Nationalite').text == 'FRA'
|
173 |
|
assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1958-05-19'
|
174 |
|
assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'FRA'
|
175 |
|
assert root.find('DemandeActe/Titulaire/DepartementDeNaissance').text == '54'
|
176 |
|
assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Whatever'
|
177 |
|
assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Kim'
|
178 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Song'
|
179 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Eloise'
|
180 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Whatever'
|
181 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Fritz'
|
182 |
|
|
183 |
|
elif aec_payload['display_id'] == '16-1':
|
184 |
|
|
185 |
|
assert resp.json['data']['demand_id'] == '16-1-AEC-LA'
|
186 |
|
|
187 |
|
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '16-1-AEC-LA--0', '16-1-AEC-LA-doc-.xml')
|
188 |
|
validate_schema(doc, AEC_XSD)
|
189 |
|
|
190 |
|
root = etree.parse(doc).getroot()
|
191 |
|
|
192 |
|
assert root.tag == 'EnveloppeMetierType'
|
193 |
|
|
194 |
|
# Generic tags
|
195 |
|
assert root.find('DemandeActe/TypeActe/Code').text == 'MARIAGE'
|
196 |
|
assert root.find('DemandeActe/NatureActe/Code').text == 'EXTRAIT-AVEC-FILIATION'
|
197 |
|
assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'Autre'
|
198 |
|
assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000'
|
199 |
|
assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395'
|
200 |
|
assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy'
|
201 |
|
assert root.find('DemandeActe/DateActe').text == '2008-08-18'
|
202 |
|
assert root.find('DemandeActe/NombreExemplaires').text == '3'
|
203 |
|
|
204 |
|
# Requester
|
205 |
|
assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com'
|
206 |
|
assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME'
|
207 |
|
assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever'
|
208 |
|
assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea'
|
209 |
|
assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455'
|
210 |
|
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre'
|
211 |
|
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Libelle').text == 'Sa soeur'
|
212 |
|
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == '22 rue Danton'
|
213 |
|
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '94270'
|
214 |
|
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Kremlin Bicetre'
|
215 |
|
|
216 |
|
# Concerned
|
217 |
|
assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR'
|
218 |
|
assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Whatever'
|
219 |
|
assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'PRK'
|
220 |
|
assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1978-05-19'
|
221 |
|
assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Josh'
|
222 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Song'
|
223 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Eloise'
|
224 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Whatever'
|
225 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Fritz'
|
226 |
|
|
227 |
|
# Concerned2
|
228 |
|
assert root.find('DemandeActe/Titulaire2/Civilite').text == 'MADAME'
|
229 |
|
assert root.find('DemandeActe/Titulaire2/NomNaissance').text == 'Kokey'
|
230 |
|
assert root.find('DemandeActe/Titulaire2/PaysDeNaissance').text == 'SEN'
|
231 |
|
assert root.find('DemandeActe/Titulaire2/DateDeNaissance').text == '1980-03-12'
|
232 |
|
assert root.find('DemandeActe/Titulaire2/Prenoms').text == 'Sarah'
|
233 |
|
assert root.find('DemandeActe/Titulaire2/Filiation/Mere/Nom').text == 'De'
|
234 |
|
assert root.find('DemandeActe/Titulaire2/Filiation/Mere/Prenoms').text == 'Coudy'
|
235 |
|
assert root.find('DemandeActe/Titulaire2/Filiation/Pere/Nom').text == 'Kokey'
|
236 |
|
assert root.find('DemandeActe/Titulaire2/Filiation/Pere/Prenoms').text == 'Pascal'
|
237 |
|
|
238 |
|
else:
|
239 |
|
assert resp.json['data']['demand_id'] == '17-1-AEC-LA'
|
240 |
|
|
241 |
|
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '17-1-AEC-LA--0', '17-1-AEC-LA-doc-.xml')
|
242 |
|
validate_schema(doc, AEC_XSD)
|
243 |
|
|
244 |
|
root = etree.parse(doc).getroot()
|
245 |
|
|
246 |
|
assert root.tag == 'EnveloppeMetierType'
|
247 |
|
|
248 |
|
# Generic tags
|
249 |
|
assert root.find('DemandeActe/TypeActe/Code').text == 'DECES'
|
250 |
|
assert root.find('DemandeActe/NatureActe/Code').text == 'COPIE-INTEGRALE'
|
251 |
|
assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'Autre'
|
252 |
|
assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000'
|
253 |
|
assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395'
|
254 |
|
assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy'
|
255 |
|
assert root.find('DemandeActe/DateActe').text == '2014-04-26'
|
256 |
|
assert root.find('DemandeActe/NombreExemplaires').text == '4'
|
257 |
|
|
258 |
|
# Requester
|
259 |
|
assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com'
|
260 |
|
assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME'
|
261 |
|
assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever'
|
262 |
|
assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea'
|
263 |
|
assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455'
|
264 |
|
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre'
|
265 |
|
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '54000'
|
266 |
|
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Nancy'
|
267 |
|
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == "37 Rue de l'Aigle Blanc"
|
268 |
|
|
269 |
|
assert not root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays')
|
270 |
|
assert not root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse')
|
271 |
|
|
272 |
|
# Concerned
|
273 |
|
assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR'
|
274 |
|
assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Yamamoto'
|
275 |
|
assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'FRA'
|
276 |
|
assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1978-05-19'
|
277 |
|
assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Yosuke'
|
278 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Ino'
|
279 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Haruka'
|
280 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Yamamoto'
|
281 |
|
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Ryu'
|
282 |
|
|
283 |
|
|
284 |
|
def test_create_aec_demand_type_without_date_acte(app, setup):
|
285 |
|
payload = json.loads(get_file_from_test_base_dir('formdata_aec_deces.json'))
|
286 |
|
payload['fields'].pop('date_acte')
|
287 |
|
resp = app.post_json('/mdel/test/create', params=payload, status=200)
|
|
129 |
def test_aec_naissance(app, aec_schema, aec_naissance_payload):
|
|
130 |
resp = app.post_json('/mdel/test/create', params=aec_naissance_payload, status=200)
|
|
131 |
|
|
132 |
assert resp.json['data']['demand_id'] == '15-4-AEC-LA'
|
|
133 |
|
|
134 |
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '15-4-AEC-LA--0', '15-4-AEC-LA-doc-.xml')
|
|
135 |
aec_schema(doc)
|
|
136 |
|
|
137 |
root = etree.parse(doc).getroot()
|
|
138 |
|
|
139 |
assert root.tag == 'EnveloppeMetierType'
|
|
140 |
|
|
141 |
# Generic tags
|
|
142 |
assert root.find('DemandeActe/TypeActe/Code').text == 'NAISSANCE'
|
|
143 |
assert root.find('DemandeActe/NatureActe/Code').text == 'COPIE-INTEGRALE'
|
|
144 |
assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'CertificatDeNationaliteFrancaise'
|
|
145 |
assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000'
|
|
146 |
assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395'
|
|
147 |
assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy'
|
|
148 |
assert root.find('DemandeActe/DateActe').text == '1958-05-19'
|
|
149 |
assert root.find('DemandeActe/NombreExemplaires').text == '2'
|
|
150 |
|
|
151 |
# Requester
|
|
152 |
assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com'
|
|
153 |
assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME'
|
|
154 |
assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever'
|
|
155 |
assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea'
|
|
156 |
assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455'
|
|
157 |
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Fils'
|
|
158 |
assert root.find('DemandeActe/Demandeur/AdresseFrancaise') is None
|
|
159 |
assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'Suisse'
|
|
160 |
assert (root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text
|
|
161 |
== '3ème, Bâtiment B, 37 rue de Paris, 3800 Bern')
|
|
162 |
|
|
163 |
assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal')
|
|
164 |
assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville')
|
|
165 |
assert not root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie')
|
|
166 |
|
|
167 |
# Concerned
|
|
168 |
assert root.find('DemandeActe/Titulaire/Civilite').text == 'MADAME'
|
|
169 |
assert root.find('DemandeActe/Titulaire/Nationalite').text == 'FRA'
|
|
170 |
assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1958-05-19'
|
|
171 |
assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'FRA'
|
|
172 |
assert root.find('DemandeActe/Titulaire/DepartementDeNaissance').text == '54'
|
|
173 |
assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Whatever'
|
|
174 |
assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Kim'
|
|
175 |
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Song'
|
|
176 |
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Eloise'
|
|
177 |
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Whatever'
|
|
178 |
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Fritz'
|
|
179 |
|
|
180 |
|
|
181 |
def test_aec_naissance_etranger(app, aec_schema, aec_naissance_etranger_payload):
|
|
182 |
resp = app.post_json('/mdel/test/create', params=aec_naissance_etranger_payload, status=200)
|
|
183 |
|
|
184 |
assert resp.json['data']['demand_id'] == '1-4-AEC-LA'
|
|
185 |
|
|
186 |
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '1-4-AEC-LA--0', '1-4-AEC-LA-doc-.xml')
|
|
187 |
aec_schema(doc)
|
|
188 |
|
|
189 |
root = etree.parse(doc).getroot()
|
|
190 |
|
|
191 |
assert root.tag == 'EnveloppeMetierType'
|
|
192 |
|
|
193 |
# Requester
|
|
194 |
assert root.find('DemandeActe/Demandeur/AdresseFrancaise') is None
|
|
195 |
assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'Suisse'
|
|
196 |
assert (root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text
|
|
197 |
== '4 rue des coquelicots, 3800 Bern')
|
|
198 |
|
|
199 |
|
|
200 |
def test_aec_mariage(app, aec_schema, aec_mariage_payload):
|
|
201 |
resp = app.post_json('/mdel/test/create', params=aec_mariage_payload, status=200)
|
|
202 |
|
|
203 |
assert resp.json['data']['demand_id'] == '16-1-AEC-LA'
|
|
204 |
|
|
205 |
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '16-1-AEC-LA--0', '16-1-AEC-LA-doc-.xml')
|
|
206 |
|
|
207 |
aec_schema(doc)
|
|
208 |
|
|
209 |
root = etree.parse(doc).getroot()
|
|
210 |
|
|
211 |
assert root.tag == 'EnveloppeMetierType'
|
|
212 |
|
|
213 |
# Generic tags
|
|
214 |
assert root.find('DemandeActe/TypeActe/Code').text == 'MARIAGE'
|
|
215 |
assert root.find('DemandeActe/NatureActe/Code').text == 'EXTRAIT-AVEC-FILIATION'
|
|
216 |
assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'Autre'
|
|
217 |
assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000'
|
|
218 |
assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395'
|
|
219 |
assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy'
|
|
220 |
assert root.find('DemandeActe/DateActe').text == '2008-08-18'
|
|
221 |
assert root.find('DemandeActe/NombreExemplaires').text == '3'
|
|
222 |
|
|
223 |
# Requester
|
|
224 |
assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com'
|
|
225 |
assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME'
|
|
226 |
assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever'
|
|
227 |
assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea'
|
|
228 |
assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455'
|
|
229 |
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre'
|
|
230 |
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Libelle').text == 'Sa soeur'
|
|
231 |
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == '22 rue Danton'
|
|
232 |
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '94270'
|
|
233 |
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Kremlin Bicetre'
|
|
234 |
|
|
235 |
# Concerned
|
|
236 |
assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR'
|
|
237 |
assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Whatever'
|
|
238 |
assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'PRK'
|
|
239 |
assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1978-05-19'
|
|
240 |
assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Josh'
|
|
241 |
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Song'
|
|
242 |
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Eloise'
|
|
243 |
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Whatever'
|
|
244 |
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Fritz'
|
|
245 |
|
|
246 |
# Concerned2
|
|
247 |
assert root.find('DemandeActe/Titulaire2/Civilite').text == 'MADAME'
|
|
248 |
assert root.find('DemandeActe/Titulaire2/NomNaissance').text == 'Kokey'
|
|
249 |
assert root.find('DemandeActe/Titulaire2/PaysDeNaissance').text == 'SEN'
|
|
250 |
assert root.find('DemandeActe/Titulaire2/DateDeNaissance').text == '1980-03-12'
|
|
251 |
assert root.find('DemandeActe/Titulaire2/Prenoms').text == 'Sarah'
|
|
252 |
assert root.find('DemandeActe/Titulaire2/Filiation/Mere/Nom').text == 'De'
|
|
253 |
assert root.find('DemandeActe/Titulaire2/Filiation/Mere/Prenoms').text == 'Coudy'
|
|
254 |
assert root.find('DemandeActe/Titulaire2/Filiation/Pere/Nom').text == 'Kokey'
|
|
255 |
assert root.find('DemandeActe/Titulaire2/Filiation/Pere/Prenoms').text == 'Pascal'
|
|
256 |
|
|
257 |
|
|
258 |
def test_aec_deces(app, aec_schema, aec_deces_payload):
|
|
259 |
resp = app.post_json('/mdel/test/create', params=aec_deces_payload, status=200)
|
|
260 |
|
|
261 |
assert resp.json['data']['demand_id'] == '17-1-AEC-LA'
|
|
262 |
|
|
263 |
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '17-1-AEC-LA--0', '17-1-AEC-LA-doc-.xml')
|
|
264 |
aec_schema(doc)
|
|
265 |
|
|
266 |
root = etree.parse(doc).getroot()
|
|
267 |
|
|
268 |
assert root.tag == 'EnveloppeMetierType'
|
|
269 |
|
|
270 |
# Generic tags
|
|
271 |
assert root.find('DemandeActe/TypeActe/Code').text == 'DECES'
|
|
272 |
assert root.find('DemandeActe/NatureActe/Code').text == 'COPIE-INTEGRALE'
|
|
273 |
assert root.find('DemandeActe/MotifDemande/Commentaire').text == 'Autre'
|
|
274 |
assert root.find('DemandeActe/LieuActe/CodePostal').text == '54000'
|
|
275 |
assert root.find('DemandeActe/LieuActe/CodeINSEE').text == '54395'
|
|
276 |
assert root.find('DemandeActe/LieuActe/Ville').text == 'Nancy'
|
|
277 |
assert root.find('DemandeActe/DateActe').text == '2014-04-26'
|
|
278 |
assert root.find('DemandeActe/NombreExemplaires').text == '4'
|
|
279 |
|
|
280 |
# Requester
|
|
281 |
assert root.find('DemandeActe/Demandeur/Courriel').text == 'chelsea@whatever.com'
|
|
282 |
assert root.find('DemandeActe/Demandeur/Civilite').text == 'MADAME'
|
|
283 |
assert root.find('DemandeActe/Demandeur/Nom').text == 'Whatever'
|
|
284 |
assert root.find('DemandeActe/Demandeur/Prenom').text == 'Chelsea'
|
|
285 |
assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455'
|
|
286 |
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre'
|
|
287 |
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '54000'
|
|
288 |
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Nancy'
|
|
289 |
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == "37 Rue de l'Aigle Blanc"
|
|
290 |
|
|
291 |
assert not root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays')
|
|
292 |
assert not root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse')
|
|
293 |
|
|
294 |
# Concerned
|
|
295 |
assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR'
|
|
296 |
assert root.find('DemandeActe/Titulaire/NomNaissance').text == 'Yamamoto'
|
|
297 |
assert root.find('DemandeActe/Titulaire/PaysDeNaissance').text == 'FRA'
|
|
298 |
assert root.find('DemandeActe/Titulaire/DateDeNaissance').text == '1978-05-19'
|
|
299 |
assert root.find('DemandeActe/Titulaire/Prenoms').text == 'Yosuke'
|
|
300 |
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Nom').text == 'Ino'
|
|
301 |
assert root.find('DemandeActe/Titulaire/Filiation/Mere/Prenoms').text == 'Haruka'
|
|
302 |
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Nom').text == 'Yamamoto'
|
|
303 |
assert root.find('DemandeActe/Titulaire/Filiation/Pere/Prenoms').text == 'Ryu'
|
|
304 |
|
|
305 |
|
|
306 |
def test_aec_without_date_acte(app, aec_deces_payload):
|
|
307 |
aec_deces_payload['fields'].pop('date_acte')
|
|
308 |
resp = app.post_json('/mdel/test/create', params=aec_deces_payload, status=200)
|
288 |
309 |
assert resp.json['err_desc'] == '<date_acte> is required'
|
289 |
310 |
|
290 |
311 |
|
291 |
|
def test_create_ile_demand_type(app, setup):
|
292 |
|
resp = app.post_json('/mdel/test/create', params=ILE_PAYLOAD, status=200)
|
|
312 |
def test_ile(app, ile_schema, ile_payload):
|
|
313 |
resp = app.post_json('/mdel/test/create', params=ile_payload, status=200)
|
293 |
314 |
assert resp.json['data']['demand_id'] == '1-14-ILE-LA'
|
294 |
315 |
|
295 |
316 |
base_doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '1-14-ILE-LA--0')
|
296 |
317 |
doc = os.path.join(base_doc, '1-14-ILE-LA-doc-.xml')
|
297 |
318 |
|
298 |
|
validate_schema(doc, ILE_XSD)
|
|
319 |
ile_schema(doc)
|
299 |
320 |
|
300 |
321 |
root = etree.parse(doc).getroot()
|
301 |
322 |
|
... | ... | |
334 |
355 |
assert root.find('ns2:Routage/ns2:Donnee/ns2:Valeur', namespaces=ns).text == '54395'
|
335 |
356 |
assert root.find('ns2:Document/ns2:Code', namespaces=ns).text == '1-14-ILE-LA'
|
336 |
357 |
assert root.find('ns2:Document/ns2:Nom', namespaces=ns).text == '1-14-ILE-LA'
|
337 |
|
assert root.find('ns2:Document/ns2:FichierFormulaire/ns2:FichierDonnees', namespaces=ns).text == '1-14-ILE-LA-doc-.xml'
|
|
358 |
assert (root.find('ns2:Document/ns2:FichierFormulaire/ns2:FichierDonnees', namespaces=ns).text
|
|
359 |
== '1-14-ILE-LA-doc-.xml')
|
338 |
360 |
|
339 |
361 |
attached_files = root.findall('ns2:PieceJointe', namespaces=ns)
|
340 |
362 |
assert len(attached_files) == 3
|
... | ... | |
359 |
381 |
assert fname in expected_files
|
360 |
382 |
|
361 |
383 |
# Without anterieur_situation_raw
|
362 |
|
payload = copy.deepcopy(ILE_PAYLOAD)
|
|
384 |
payload = copy.deepcopy(ile_payload)
|
363 |
385 |
payload['fields'].pop('anterieur_situation_raw')
|
364 |
386 |
resp = app.post_json('/mdel/test/create', params=payload, status=200)
|
365 |
387 |
assert resp.json['err_desc'] == 'anterieur_situation_raw is required'
|
366 |
388 |
|
367 |
389 |
|
368 |
|
def test_create_ile_demand_type_invalid_document_proof(app, setup):
|
|
390 |
def test_ile_missing_key(app, ile_payload):
|
369 |
391 |
# test with missing key
|
370 |
|
payload = json.loads(get_file_from_test_base_dir('formdata.json'))
|
371 |
|
payload['fields'].pop('justificatif_domicile_hebergeur')
|
372 |
|
resp = app.post_json('/mdel/test/create', params=payload, status=200)
|
|
392 |
ile_payload['fields'].pop('justificatif_domicile_hebergeur')
|
|
393 |
resp = app.post_json('/mdel/test/create', params=ile_payload, status=200)
|
373 |
394 |
assert resp.json['err_desc'] == 'justificatif_domicile and all its attributes are required'
|
374 |
395 |
|
375 |
|
# test with invalid content
|
376 |
|
payload = json.loads(get_file_from_test_base_dir('formdata.json'))
|
377 |
|
payload['fields']['justificatif_identite'] = None
|
378 |
|
payload['fields']['justificatif_identite_verso'] = None
|
379 |
|
resp = app.post_json('/mdel/test/create', params=payload, status=200)
|
|
396 |
|
|
397 |
def test_ile_invalid_value(app, ile_payload):
|
|
398 |
ile_payload['fields']['justificatif_identite'] = None
|
|
399 |
ile_payload['fields']['justificatif_identite_verso'] = None
|
|
400 |
resp = app.post_json('/mdel/test/create', params=ile_payload, status=200)
|
380 |
401 |
assert resp.json['err_desc'] == 'justificatif_identite and all its attributes are required'
|
381 |
402 |
|
382 |
403 |
|
383 |
|
def test_get_status(app, setup):
|
|
404 |
def test_ile_get_status(app, mdel, ile_payload):
|
384 |
405 |
shutil.copytree(
|
385 |
|
os.path.join(get_mdel_base_dir(), 'test', 'outputs'),
|
|
406 |
os.path.join(data_dir, 'test', 'outputs'),
|
386 |
407 |
os.path.join(get_resource_base_dir(), 'test', 'outputs'))
|
387 |
|
resp = app.post_json('/mdel/test/create', params=ILE_PAYLOAD, status=200)
|
|
408 |
resp = app.post_json('/mdel/test/create', params=ile_payload, status=200)
|
388 |
409 |
demand_id = resp.json['data']['demand_id']
|
389 |
410 |
assert demand_id == '1-14-ILE-LA'
|
390 |
411 |
resp = app.get('/mdel/test/status', params={'demand_id': demand_id})
|
... | ... | |
395 |
416 |
assert data['comment'] == 'Dossier traité.'
|
396 |
417 |
assert Demand.objects.get(demand_id='1-14-ILE-LA').status == 'accepted'
|
397 |
418 |
|
398 |
|
Demand.objects.create(resource=setup, num='97-5', flow_type='AEC-LA', demand_id='97-5-AEC-LA')
|
|
419 |
Demand.objects.create(resource=mdel, num='97-5', flow_type='AEC-LA', demand_id='97-5-AEC-LA')
|
399 |
420 |
|
400 |
421 |
resp = app.get('/mdel/test/status', params={'demand_id': '97-5-AEC-LA'}, status=200)
|
401 |
422 |
data = resp.json['data']
|
... | ... | |
405 |
426 |
assert data['comment'] == 'Le dossier a été reçu et sera traité prochainement.'
|
406 |
427 |
assert Demand.objects.get(demand_id='97-5-AEC-LA').status == 'imported'
|
407 |
428 |
|
408 |
|
Demand.objects.create(resource=setup, num='102-2', flow_type='AEC-LA', demand_id='102-2-AEC-LA')
|
|
429 |
Demand.objects.create(resource=mdel, num='102-2', flow_type='AEC-LA', demand_id='102-2-AEC-LA')
|
409 |
430 |
|
410 |
431 |
resp = app.get('/mdel/test/status', params={'demand_id': '102-2-AEC-LA'}, status=200)
|
411 |
432 |
data = resp.json['data']
|
... | ... | |
416 |
437 |
assert Demand.objects.get(demand_id='102-2-AEC-LA').status == 'accepted'
|
417 |
438 |
|
418 |
439 |
|
419 |
|
def test_get_status_unknown_demand(app, setup):
|
|
440 |
def test_get_status_unknown_demand(app):
|
420 |
441 |
resp = app.get('/mdel/test/status', params={'demand_id': '1-14-ILE-LA'}, status=404)
|
421 |
442 |
assert resp.json['err_desc'] == 'Demand matching query does not exist.'
|
422 |
443 |
|
423 |
444 |
|
424 |
|
def test_get_status_no_response(app, setup):
|
|
445 |
def test_get_status_no_response(app, mdel):
|
425 |
446 |
shutil.copytree(
|
426 |
|
os.path.join(get_mdel_base_dir(), 'test', 'outputs'),
|
|
447 |
os.path.join(data_dir, 'test', 'outputs'),
|
427 |
448 |
os.path.join(get_resource_base_dir(), 'test', 'outputs'))
|
428 |
|
Demand.objects.create(resource=setup, num='1-15', flow_type='ILE-LA', demand_id='1-15-ILE-LA')
|
|
449 |
Demand.objects.create(resource=mdel, num='1-15', flow_type='ILE-LA', demand_id='1-15-ILE-LA')
|
429 |
450 |
|
430 |
451 |
resp = app.get('/mdel/test/status', params={'demand_id': '1-15-ILE-LA'}, status=200)
|
431 |
452 |
data = resp.json['data']
|
... | ... | |
436 |
457 |
assert Demand.objects.get(demand_id='1-15-ILE-LA').status is None
|
437 |
458 |
|
438 |
459 |
|
439 |
|
def test_get_not_closed_status(app, setup):
|
|
460 |
def test_get_not_closed_status(app, mdel):
|
440 |
461 |
shutil.copytree(
|
441 |
|
os.path.join(get_mdel_base_dir(), 'test', 'outputs'),
|
|
462 |
os.path.join(data_dir, 'test', 'outputs'),
|
442 |
463 |
os.path.join(get_resource_base_dir(), 'test', 'outputs'))
|
443 |
|
Demand.objects.create(resource=setup, num='15-9', flow_type='AEC-LA', demand_id='15-9-AEC-LA')
|
|
464 |
Demand.objects.create(resource=mdel, num='15-9', flow_type='AEC-LA', demand_id='15-9-AEC-LA')
|
444 |
465 |
|
445 |
466 |
resp = app.get('/mdel/test/status', params={'demand_id': '15-9-AEC-LA'}, status=200)
|
446 |
467 |
data = resp.json['data']
|
... | ... | |
452 |
473 |
assert Demand.objects.get(demand_id='15-9-AEC-LA').status == 'in progress'
|
453 |
474 |
|
454 |
475 |
|
455 |
|
def test_data_source_applicants(app, setup):
|
|
476 |
def test_data_source_applicants(app):
|
456 |
477 |
resp = app.get('/mdel/test/applicants', status=200)
|
457 |
478 |
data = resp.json['data']
|
458 |
479 |
assert len(data) == 9
|
... | ... | |
464 |
485 |
assert len(data) == 7
|
465 |
486 |
|
466 |
487 |
|
467 |
|
def test_data_source_certificates(app, setup):
|
|
488 |
def test_data_source_certificates(app):
|
468 |
489 |
resp = app.get('/mdel/test/certificates', status=200)
|
469 |
490 |
data = resp.json['data']
|
470 |
491 |
for datum in data:
|
... | ... | |
476 |
497 |
assert datum['text'] == 'Acte de décès'
|
477 |
498 |
|
478 |
499 |
|
479 |
|
def test_data_source_certificate_types(app, setup):
|
|
500 |
def test_data_source_certificate_types(app):
|
480 |
501 |
resp = app.get('/mdel/test/certificate-types', status=200)
|
481 |
502 |
data = resp.json['data']
|
482 |
503 |
assert len(data) == 4
|
483 |
|
-
|