259 lines
8.7 KiB
Python
259 lines
8.7 KiB
Python
import pytest
|
|
import responses
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.core.cache import cache
|
|
|
|
from passerelle.apps.r2p.models import R2P
|
|
from passerelle.base.models import AccessRight, ApiUser
|
|
|
|
|
|
@pytest.fixture()
|
|
def connector(db):
|
|
api = ApiUser.objects.create(username='all', keytype='', key='')
|
|
connector = R2P.objects.create(
|
|
api_url='https://r2p.invalid', slug='test', oauth_username='foo', oauth_password='bar'
|
|
)
|
|
obj_type = ContentType.objects.get_for_model(connector)
|
|
AccessRight.objects.create(
|
|
codename='can_access', apiuser=api, resource_type=obj_type, resource_pk=connector.pk
|
|
)
|
|
return connector
|
|
|
|
|
|
def mock_tocken(rsps):
|
|
rsps.post(
|
|
'https://r2p.invalid/token',
|
|
status=200,
|
|
json={'access_token': '1234'},
|
|
)
|
|
|
|
|
|
def test_token(app, connector):
|
|
cache.clear()
|
|
with responses.RequestsMock() as rsps:
|
|
mock_tocken(rsps)
|
|
rsps.get(
|
|
'https://r2p.invalid/r2p/v1/personne/1257553562447',
|
|
status=200,
|
|
json={
|
|
'personnePhysique': {
|
|
'identifiant': {'spi': '1257553562447'},
|
|
'etatCivil': {'cdSexe': '1', 'lbNomNaissance': 'SIMON'},
|
|
}
|
|
},
|
|
)
|
|
resp = app.get('/r2p/test/personne-by-spi?spi=1257553562447')
|
|
assert resp.json['err'] == 0
|
|
api_call = rsps.calls[1]
|
|
assert api_call.request.headers['Authorization'] == 'Bearer 1234'
|
|
rsps.reset()
|
|
|
|
with responses.RequestsMock() as rsps:
|
|
# no more call to obtain a token, get it from cache
|
|
rsps.get(
|
|
'https://r2p.invalid/r2p/v1/personne/1257553562447',
|
|
status=200,
|
|
json={
|
|
'personnePhysique': {
|
|
'identifiant': {'spi': '1257553562447'},
|
|
'etatCivil': {'cdSexe': '1', 'lbNomNaissance': 'SIMON'},
|
|
}
|
|
},
|
|
)
|
|
resp = app.get('/r2p/test/personne-by-spi?spi=1257553562447')
|
|
assert resp.json['err'] == 0
|
|
api_call = rsps.calls[0]
|
|
assert api_call.request.headers['Authorization'] == 'Bearer 1234'
|
|
|
|
|
|
@pytest.mark.parametrize('hide_spi', [True, False])
|
|
def test_personne_by_spi(app, connector, hide_spi):
|
|
connector.hide_spi = hide_spi
|
|
connector.save()
|
|
cache.clear()
|
|
data = {
|
|
'personnePhysique': {
|
|
'identifiant': {'spi': '1257553562447'},
|
|
'etatCivil': {'cdSexe': '1', 'lbNomNaissance': 'SIMON'},
|
|
}
|
|
}
|
|
with responses.RequestsMock() as rsps:
|
|
mock_tocken(rsps)
|
|
rsps.get('https://r2p.invalid/r2p/v1/personne/1257553562447', status=200, json=data)
|
|
resp = app.get('/r2p/test/personne-by-spi?spi=1257553562447')
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 0
|
|
if hide_spi:
|
|
data['personnePhysique']['identifiant']['spi'] = 'ANONYMIZED'
|
|
assert json_resp['data'] == data
|
|
|
|
|
|
def test_personne_by_spi_error(app, connector):
|
|
cache.clear()
|
|
with responses.RequestsMock() as rsps:
|
|
mock_tocken(rsps)
|
|
rsps.get(
|
|
'https://r2p.invalid/r2p/v1/personne/123',
|
|
status=400,
|
|
json={'erreur': {'code': '40015', 'message': '[spi] Format du SPI erroné'}},
|
|
)
|
|
resp = app.get('/r2p/test/personne-by-spi?spi=123')
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 1
|
|
assert json_resp['err_class'] == 'passerelle.utils.jsonresponse.APIError'
|
|
assert (
|
|
json_resp['err_desc']
|
|
== '400 Client Error: Bad Request for url: https://r2p.invalid/r2p/v1/personne/123'
|
|
)
|
|
assert json_resp['data']['erreur']['code'] == '40015'
|
|
assert json_resp['data']['erreur']['message'] == '[spi] Format du SPI erroné'
|
|
|
|
|
|
@pytest.mark.parametrize('hide_spi', [True, False])
|
|
def test_personne_by_criteria(app, connector, hide_spi):
|
|
connector.hide_spi = hide_spi
|
|
connector.save()
|
|
cache.clear()
|
|
data = {
|
|
'personnePhysique': {
|
|
'identifiant': {'spi': '7540305732558'},
|
|
'etatCivil': {
|
|
'cdSexe': '1',
|
|
'lbNomNaissance': 'garcia',
|
|
'lbPrenomNaissance': 'samuel',
|
|
'lbNomUsage': 'garcia',
|
|
'lbPrenomUsage': 'samuel',
|
|
'anneeNaissance': '1943',
|
|
'moisNaissance': '06',
|
|
'jourNaissance': '15',
|
|
'cdPaysNaissance': '99100',
|
|
'cdDeptNaissance': '75',
|
|
'cdTOMNaissance': None,
|
|
'cdCommuneNaissance': '109',
|
|
},
|
|
'adresse': {
|
|
'cdPays': '99100',
|
|
'lbPays': 'FRANCE',
|
|
'cdDepartement': '75',
|
|
'lbDepartement': 'PARIS',
|
|
'cdTOM': None,
|
|
'lbTOM': None,
|
|
'cdCommune': '112',
|
|
'lbCommune': 'PARIS',
|
|
'cdVoie': '0881',
|
|
'lbVoie': 'RUE DE BERCY',
|
|
'numeroVoie': '139',
|
|
'indiceDeRepetition': None,
|
|
},
|
|
}
|
|
}
|
|
with responses.RequestsMock() as rsps:
|
|
mock_tocken(rsps)
|
|
params = {
|
|
'prenom': 'samuel',
|
|
'nom': 'garcia',
|
|
'sexe': '1',
|
|
'naisDate': '15/06/1943',
|
|
'naisCodePays': '99100',
|
|
'naisCodeCommune': '109',
|
|
'naisCodeDept': '75',
|
|
}
|
|
rsps.get(
|
|
'https://r2p.invalid/r2p/v1/personne',
|
|
status=200,
|
|
match=[responses.matchers.query_param_matcher(params)],
|
|
json=data,
|
|
)
|
|
resp = app.get('/r2p/test/personne-by-criteria', params=params)
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 0
|
|
if hide_spi:
|
|
data['personnePhysique']['identifiant']['spi'] = 'ANONYMIZED'
|
|
assert json_resp['data'] == data
|
|
|
|
|
|
def test_personne_by_criteria_error(app, connector):
|
|
cache.clear()
|
|
with responses.RequestsMock() as rsps:
|
|
mock_tocken(rsps)
|
|
params = {
|
|
'prenom': 'samuel',
|
|
'nom': 'garcia',
|
|
'sexe': '1',
|
|
}
|
|
rsps.get(
|
|
'https://r2p.invalid/r2p/v1/personne',
|
|
status=400,
|
|
match=[responses.matchers.query_param_matcher(params)],
|
|
json={'erreur': {'code': '40005', 'message': '[naisDate] Date de naissance absente'}},
|
|
)
|
|
resp = app.get('/r2p/test/personne-by-criteria', params=params)
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 1
|
|
assert json_resp['data'] == {
|
|
'erreur': {'code': '40005', 'message': '[naisDate] Date de naissance absente'}
|
|
}
|
|
|
|
|
|
@pytest.mark.parametrize('hide_spi', [True, False])
|
|
def test_spi_by_criteria(app, connector, hide_spi):
|
|
connector.hide_spi = hide_spi
|
|
connector.save()
|
|
cache.clear()
|
|
data = {
|
|
'personnePhysique': {
|
|
'identifiant': {'spi': '7540305732558'},
|
|
'etatCivil': {
|
|
'cdSexe': '1',
|
|
'lbNomNaissance': 'garcia',
|
|
'lbPrenomNaissance': 'samuel',
|
|
'lbNomUsage': 'garcia',
|
|
'lbPrenomUsage': 'samuel',
|
|
'anneeNaissance': '1943',
|
|
'moisNaissance': '06',
|
|
'jourNaissance': '15',
|
|
'cdPaysNaissance': '99100',
|
|
'cdDeptNaissance': '75',
|
|
'cdTOMNaissance': None,
|
|
'cdCommuneNaissance': '109',
|
|
},
|
|
'adresse': {
|
|
'cdPays': '99100',
|
|
'lbPays': 'FRANCE',
|
|
'cdDepartement': '75',
|
|
'lbDepartement': 'PARIS',
|
|
'cdTOM': None,
|
|
'lbTOM': None,
|
|
'cdCommune': '112',
|
|
'lbCommune': 'PARIS',
|
|
'cdVoie': '0881',
|
|
'lbVoie': 'RUE DE BERCY',
|
|
'numeroVoie': '139',
|
|
'indiceDeRepetition': None,
|
|
},
|
|
}
|
|
}
|
|
with responses.RequestsMock() as rsps:
|
|
mock_tocken(rsps)
|
|
params = {
|
|
'prenom': 'samuel',
|
|
'nom': 'garcia',
|
|
'sexe': '1',
|
|
'naisDate': '15/06/1943',
|
|
'naisCodePays': '99100',
|
|
'naisCodeCommune': '109',
|
|
'naisCodeDept': '75',
|
|
}
|
|
rsps.get(
|
|
'https://r2p.invalid/r2p/v1/personne/spi',
|
|
status=200,
|
|
match=[responses.matchers.query_param_matcher(params)],
|
|
json=data,
|
|
)
|
|
resp = app.get('/r2p/test/spi-by-criteria', params=params)
|
|
json_resp = resp.json
|
|
assert json_resp['err'] == 0
|
|
if hide_spi:
|
|
data['personnePhysique']['identifiant']['spi'] = 'ANONYMIZED'
|
|
assert json_resp['data'] == data
|