solis: allow filters on rsa-user-info endpoint (#37022)
This commit is contained in:
parent
676229752a
commit
6ecf6ad6ed
|
@ -601,10 +601,14 @@ class Solis(BaseResource):
|
|||
'links': {
|
||||
'description': _('get linked informations (comma separated list, empty for all)'),
|
||||
'example_value': 'etatCivil,conjoint',
|
||||
}
|
||||
},
|
||||
'filters': {
|
||||
'description': _('filter response (list), ex: idStructure=399 or '
|
||||
'idStructure!=399,prescriptionPlacement=Placement'),
|
||||
},
|
||||
})
|
||||
def rsa_user_info(self, request, name_id, user_id, information='individu',
|
||||
index='search', links=None):
|
||||
index='search', links=None, filters=None):
|
||||
try:
|
||||
link = SolisRSALink.objects.get(resource=self, name_id=name_id, user_id=user_id)
|
||||
except SolisRSALink.DoesNotExist:
|
||||
|
@ -617,6 +621,15 @@ class Solis(BaseResource):
|
|||
if text != link.text:
|
||||
link.text = text
|
||||
link.save()
|
||||
if filters and isinstance(response, list):
|
||||
for filter_ in filters.split(','):
|
||||
key, value = filter_.split('=')
|
||||
if key.endswith('!'):
|
||||
response = [item for item in response
|
||||
if str(item.get(key[:-1])) != value]
|
||||
else:
|
||||
response = [item for item in response
|
||||
if str(item.get(key)) == value]
|
||||
return {'data': response}
|
||||
|
||||
|
||||
|
|
|
@ -65,6 +65,12 @@ RSA_3LINKS = '''{
|
|||
]
|
||||
}
|
||||
}'''
|
||||
RSA_ACTIONS = '''[
|
||||
{"idStructure":42, "prescriptionPlacement":"Placement"},
|
||||
{"idStructure":42, "prescriptionPlacement":"Prescription"},
|
||||
{"idStructure":43, "prescriptionPlacement":"Prescription"},
|
||||
{"idStructure":44, "prescriptionPlacement":"Placement"}
|
||||
]'''
|
||||
|
||||
|
||||
|
||||
|
@ -850,6 +856,41 @@ def test_solis_rsa_link_infos_unlink(app, solis):
|
|||
assert resp.json['err_desc'] == 'unknown link'
|
||||
assert resp.json['data'] is None
|
||||
|
||||
# get actions, with filters
|
||||
with mock.patch('passerelle.utils.Request.get') as requests_get:
|
||||
with mock.patch('passerelle.utils.Request.post') as requests_post:
|
||||
requests_post.return_value = utils.FakedResponse(content=RSATOKEN, status_code=200)
|
||||
endpoint_base = utils.generic_endpoint_url('solis', 'rsa-user-info', slug=solis.slug)
|
||||
endpoint = endpoint_base + '?name_id=%s&user_id=4242&information=actions' % NAMEID
|
||||
requests_get.return_value = utils.FakedResponse(content=RSA_ACTIONS,
|
||||
status_code=200)
|
||||
resp = app.get(endpoint, status=200)
|
||||
assert requests_post.call_count == 1 # get a token
|
||||
assert requests_get.call_count == 1 # get actions
|
||||
assert '/referentiels/grsa/actions/search/' in requests_get.call_args[0][0]
|
||||
assert resp.json['err'] == 0
|
||||
assert len(resp.json['data']) == 4 # all actions
|
||||
|
||||
filtered = endpoint + '&filters=idStructure=42'
|
||||
resp = app.get(filtered, status=200)
|
||||
assert len(resp.json['data']) == 2
|
||||
assert resp.json['data'][0]['idStructure'] == 42
|
||||
|
||||
filtered = endpoint + '&filters=idStructure!=42'
|
||||
resp = app.get(filtered, status=200)
|
||||
assert len(resp.json['data']) == 2
|
||||
assert resp.json['data'][0]['idStructure'] == 43
|
||||
assert resp.json['data'][1]['idStructure'] == 44
|
||||
|
||||
filtered = endpoint + '&filters=idStructure!=42,idStructure!=43,prescriptionPlacement=Placement'
|
||||
resp = app.get(filtered, status=200)
|
||||
assert len(resp.json['data']) == 1
|
||||
assert resp.json['data'][0]['idStructure'] == 44
|
||||
|
||||
filtered = endpoint + '&filters='
|
||||
resp = app.get(filtered, status=200)
|
||||
assert len(resp.json['data']) == 4 # empty filters: all actions
|
||||
|
||||
# get referential for a linked user with links
|
||||
with mock.patch('passerelle.utils.Request.get') as requests_get:
|
||||
with mock.patch('passerelle.utils.Request.post') as requests_post:
|
||||
|
|
Loading…
Reference in New Issue