passerelle/tests/test_actesweb.py

169 lines
6.1 KiB
Python

# 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 <http://www.gnu.org/licenses/>.
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',
),
)