# Passerelle - uniform access to data and services # Copyright (C) 2018 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 # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; exclude even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a.deepcopy of the GNU Affero General Public License # along with this program. If not, see . import json import os import stat import pytest import tests.utils from passerelle.apps.actesweb.models import ActesWeb def get_test_base_dir(name): return os.path.join(os.path.dirname(__file__), 'data', name) def get_file_from_test_base_dir(filename): path = os.path.join(get_test_base_dir('actesweb'), filename) with open(path) as fd: return fd.read() @pytest.fixture def actesweb(db): return tests.utils.make_resource(ActesWeb, **{'slug': 'test'}) PAYLOAD = [ {'birth': json.loads(get_file_from_test_base_dir('payload_birth.json'))}, {'mariage': json.loads(get_file_from_test_base_dir('payload_mariage.json'))}, {'death': json.loads(get_file_from_test_base_dir('payload_death.json'))}, ] @pytest.fixture(params=PAYLOAD) def payload(request): return request.param def get_demand_filepath(con, demand_id): filename = '_'.join(demand_id.split('_')[1:]) return os.path.join(con.basepath, filename) def assert_file_content_values(filename, expectations): with open(filename, encoding='iso-8859-15') as fp: for line in fp.readlines(): field, value = line.split('=') if field in expectations: assert value.strip() == expectations[field] def test_demand_creation(app, payload, actesweb): url = '/actesweb/test/create/' if 'birth' in payload: response = app.post_json(url, params=payload['birth']) demand_id = response.json['data']['demand_id'] demfile = get_demand_filepath(actesweb, demand_id) assert_file_content_values( demfile, dict( # noqa pylint: disable=use-dict-literal DEMANDEUR_CIVILITE="Madame", DEMANDEUR_NOM_USAGE="W'hatever?", DEMANDEUR_PRENOMS="Kim Chelsea", DEMANDEUR_ADRESSE1="37 Rue de l'Aigle Blanc", DEMANDEUR_VILLE="Nancy", DEMANDEUR_CP="54000", DEMANDEUR_PAYS="France", DEMANDEUR_TEL="+33 6 55 44 22 11", DEMANDEUR_ADR="chelsea@whatever.com", DEMANDE_NOM="Whatever", DEMANDE_PRENOMS="Kevin", DEMANDE_DATE_EVENEMENT="20120714", TYPE_DEMANDE="Copie Integrale", ACTE="NA", NB="1", LIEU_EVENEMENT="Nancy", PERE_NOM="Smith", PERE_PRENOMS="John Oliver", MERE_NOM="Smith", MERE_PRENOM="Kim", DEMANDE_SEXE="m", ), ) elif 'mariage' in payload: response = app.post_json(url, params=payload['mariage']) demand_id = response.json['data']['demand_id'] demfile = get_demand_filepath(actesweb, demand_id) assert_file_content_values( demfile, dict( # noqa pylint: disable=use-dict-literal DEMANDEUR_CIVILITE="Madame", DEMANDEUR_NOM_USAGE="Whatever", DEMANDEUR_NOM="Bar", DEMANDEUR_PRENOMS="Zoé", DEMANDEUR_ADRESSE1="169, rue du Château", DEMANDEUR_VILLE="Nancy", DEMANDEUR_CP="54001", DEMANDEUR_PAYS="France", DEMANDEUR_TEL="+33 6 55 44 22 11", DEMANDEUR_ADR="chelsea@whatever.com", DEMANDE_NOM="Whatever", DEMANDE_PRENOMS="Kevin", DEMANDE_DATE_EVENEMENT="20120714", TYPE_DEMANDE="Copie Integrale", ACTE="MA", NB="1", LIEU_EVENEMENT="Nancy", PERE_NOM="Smith", PERE_PRENOMS="John Oliver", MERE_NOM="Smith", MERE_PRENOM="Kim", DEMANDE_SEXE="m", CONJOINT_NOM="Contrao", CONJOIN_PRENOMS="Chelsea", CONJOINT_PERE_NOM="Scaramucci", CONJOINT_PERE_PRENOMS="Antonio", CONJOINT_MERE_NOM="Scaramucci", CONJOINT_MERE_PRENOMS="Marguerite", ), ) else: response = app.post_json(url, params=payload['death']) demand_id = response.json['data']['demand_id'] demfile = get_demand_filepath(actesweb, demand_id) # make sure only owner can read file assert bool(os.stat(demfile).st_mode & stat.S_IRUSR) # make sure group can read and write (move) file assert bool(os.stat(demfile).st_mode & stat.S_IRGRP) assert bool(os.stat(demfile).st_mode & stat.S_IWGRP) # and no others assert not bool(os.stat(demfile).st_mode & stat.S_IRWXO) assert_file_content_values( demfile, dict( # noqa pylint: disable=use-dict-literal DEMANDEUR_CIVILITE="Madame", DEMANDEUR_NOM_USAGE="Whatever", DEMANDEUR_PRENOMS="Kim Chelsea", DEMANDEUR_ADRESSE1="37 Rue de l'Aigle Blanc", DEMANDEUR_VILLE="Nancy", DEMANDEUR_CP="54000", DEMANDEUR_PAYS="France", DEMANDEUR_TEL="+33 6 55 44 22 11", DEMANDEUR_ADR="chelsea@whatever.com", DEMANDE_NOM="Whatever", DEMANDE_PRENOMS="Kevin", DEMANDE_DATE_EVENEMENT="20120714", TYPE_DEMANDE="Extrait sans filiation", ACTE="DE", NB="1", LIEU_EVENEMENT="Nancy", DEMANDE_SEXE="m", ), )