okina: allow multiple subscriptions in one call (#43610)

This commit is contained in:
Thomas NOËL 2020-06-06 01:25:46 +02:00
parent 9c50291e3a
commit 57a7cce616
2 changed files with 20 additions and 0 deletions

View File

@ -263,6 +263,14 @@ class Okina(BaseResource):
raise APIError('payload must be a JSON object', http_status=400)
if not isinstance(payload, dict):
raise APIError('payload must be a dict', http_status=400)
if 'lineIds' in payload:
lineids = payload.pop('lineIds')
lineids = [lid.strip() for lid in lineids.split(',')]
subscriptions = []
for lineid in lineids:
payload['lineId'] = lineid
subscriptions.append(self.request('subscriptions', payload, result_is_list=False))
return {'data': subscriptions}
return {'data': self.request('subscriptions', payload, result_is_list=False)}
@endpoint(name='subscription', pattern='^(?P<subscription_id>\d+)/*$',

View File

@ -1935,6 +1935,18 @@ def test_okina_suscribe(app, okina):
assert resp.json['err'] == 0
assert resp.json['data'] == {'foo': 'bar'}
# multiple subscriptions
endpoint = utils.generic_endpoint_url('okina', 'subscription', slug=okina.slug)
with mock.patch('passerelle.utils.Request.post') as requests_post:
requests_post.return_value = utils.FakedResponse(content='{"sub":"ok"}', status_code=200)
resp = app.post_json(endpoint, params={'lineIds': '1 ,2, 3', 'foo': 'bar'})
assert requests_post.call_count == 3
assert json.loads(requests_post.call_args_list[0][1]['data']) == {'foo': 'bar', 'lineId': '1'}
assert json.loads(requests_post.call_args_list[1][1]['data']) == {'foo': 'bar', 'lineId': '2'}
assert json.loads(requests_post.call_args_list[2][1]['data']) == {'foo': 'bar', 'lineId': '3'}
assert resp.json['err'] == 0
assert resp.json['data'] == [{'sub': 'ok'}, {'sub': 'ok'}, {'sub': 'ok'}]
# qrcode
endpoint = '/okina/test/subscriber/123/qrcode'
with mock.patch('passerelle.utils.Request.get') as requests_get: