solis: add endpoint to get an item in some referentials (#32877)

This commit is contained in:
Thomas NOËL 2019-05-08 23:52:46 +02:00
parent ea7a20a3f2
commit 1b58e3ddcd
2 changed files with 54 additions and 1 deletions

View File

@ -161,7 +161,7 @@ class Solis(BaseResource):
'codeCommune': {'example_value': '21'},
'q': {'description': _('Returns only items whose text matches'),
'example_value': 'claudel'},
'id': {'description': _('Returns only item with this id (code)')},
'id': {'description': _('Returns only items with this id (code)')},
'ignore': {'description': _('Do not return items with this id, '
'or multiple ids separated with commas'),
'example_value': '9999'},
@ -207,6 +207,25 @@ class Solis(BaseResource):
return {'data': items}
@endpoint(name='referential-item', perm='can_access',
pattern=r'^(?P<module>[\w-]+)/(?P<name>[\w-]+)/(?P<index>[\w-]+)/$',
example_pattern='{module}/{name}/{index}/',
description=_('Get an item from module/name (available only on some referentials)'),
parameters={
'module': {'description': _('Referential module: asg, civi, trans'),
'example_value': 'civi'},
'name': {'description': _('Referential name in this module'),
'example_value': 'individu'},
'index': {'description': _('Item index number'),
'example_value': '4273'},
})
def referential_item(self, request, module, name, index):
endpoint = 'referentiels/%s/%s/%s/' % (module, name, index)
content = self.request(endpoint)
if not isinstance(content, dict):
raise APIError('response is not a dictionnary', data={'json_content': content})
return {'data': content}
#
# APA endpoints
#

View File

@ -23,6 +23,7 @@ APAINFOS = {
}
APAREQUEST = '{"demandeAsg":{"visite":{"date":"2016-07-07","heure":"1330"},"demande":{"type":"Allocation Personnalis\\u00e9e Autonomie","indexDemande":42,"nature":"Domicile"},"droit":{"dateDebut":"2016-08-23","dateFin":"2018-08-31"},"complementDossier":{"dateArrivee":"2016-06-22","dateDossierComplet":"2016-06-22"},"suivi":{"dateDecision":"2016-08-23","decision":"Accord"}}}'
DEPARTEMENTS = '{"departements":[{"code":"1","libelle":"Ain","pays":{"code":"79","libelle":"France"}},{"code":"2","libelle":"Aisne","pays":{"code":"79","libelle":"France"}},{"code":"3","libelle":"Allier","pays":{"code":"79","libelle":"France"}},{"code":"4","libelle":"Alpes de Haute Provence","pays":{"code":"79","libelle":"France"}},{"code":"5","libelle":"Hautes Alpes","pays":{"code":"79","libelle":"France"}},{"code":"6","libelle":"Alpes Maritimes","pays":{"code":"79","libelle":"France"}},{"code":"7","libelle":"Ardèche","pays":{"code":"79","libelle":"France"}},{"code":"8","libelle":"Ardennes","pays":{"code":"79","libelle":"France"}}]}'
CIVI_INDIVIDU = '{"index":4273,"referentDossier":true,"presentFoyer":true,"etatCivil":{"genre":"MME","sexe":"F","nom":"NOM","prenom":"Prenom","nomNaissance":"NEENOM","dateNaissance":"1950-12-10","lieuNaissance":"NOWHERE"}}'
@pytest.fixture
@ -466,6 +467,39 @@ def test_solis_referentiels(app, solis):
assert resp.json['data'] == {'json_content': None, 'status_code': 500}
def test_solis_referential_item(app, solis):
# full opened access
api = ApiUser.objects.create(username='all', keytype='', key='')
obj_type = ContentType.objects.get_for_model(solis)
AccessRight.objects.create(codename='can_access', apiuser=api, resource_type=obj_type,
resource_pk=solis.pk)
with mock.patch('passerelle.utils.Request.get') as requests_get:
requests_get.return_value = utils.FakedResponse(content=CIVI_INDIVIDU, status_code=200)
url = utils.generic_endpoint_url('solis', 'referential-item', slug=solis.slug)
resp = app.get(url + '/civi/individu/4373/', status=200)
assert requests_get.call_count == 1
assert requests_get.call_args[0][0].endswith('/solisapi/referentiels/civi/individu/4373/')
assert resp.json['err'] == 0
assert resp.json['data']['etatCivil']['nom'] == 'NOM'
requests_get.return_value = utils.FakedResponse(content='{"nada":0}', status_code=404,
reason='Not found')
url = utils.generic_endpoint_url('solis', 'referential-item', slug=solis.slug)
resp = app.get(url + '/civi/individu/424242/', status=200)
assert requests_get.call_args[0][0].endswith('/solisapi/referentiels/civi/individu/424242/')
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "error status:404 'Not found', content:'{\"nada\":0}'"
assert resp.json['data'] == {'json_content': {'nada': 0}, 'status_code': 404}
requests_get.return_value = utils.FakedResponse(content='["not a dict"]', status_code=200)
url = utils.generic_endpoint_url('solis', 'referential-item', slug=solis.slug)
resp = app.get(url + '/civi/individu/0/', status=200)
assert requests_get.call_args[0][0].endswith('/solisapi/referentiels/civi/individu/0/')
assert resp.json['err'] == 1
assert 'not a dict' in resp.json['err_desc']
def test_unflat_dict():
assert unflat({'foo': 'bar', 'two_foo': 'one', 'two_bar': 'two'}) == {'foo': 'bar', 'two': {'foo': 'one', 'bar': 'two'}}