lille urban card: return error details in card request endpoint (#39526)

This commit is contained in:
Frédéric Péters 2020-02-04 14:33:16 +01:00 committed by Thomas NOËL
parent a1030144aa
commit 882610f2ab
2 changed files with 45 additions and 6 deletions

View File

@ -120,11 +120,13 @@ class LilleUrbanCard(BaseResource):
response = self.requests.post(
urljoin(self.base_url, '/clu/ws/demanderCarte'),
json=data,
auth=HttpBearerAuth(self.get_token())).json()
if response.get('erreur'):
self.logger.error('error requesting card (%r)', response['erreur'])
raise APIError(response['erreur'])
return {'data': response} # {"n_demande_clu":10000005}
auth=HttpBearerAuth(self.get_token()))
response_json = response.json()
if response_json.get('erreur'):
self.logger.error('error requesting card (%r)', response_json['erreur'])
response_json['status_code'] = response.status_code
raise APIError(response_json['erreur'], data=response_json)
return {'data': response_json} # {"n_demande_clu":10000005}
@endpoint(perm='can_access',
description=_('Get status of card request'),

View File

@ -28,9 +28,16 @@ def mocked_http(url, request):
if url.path == '/clu/ws/auth/connexion':
return {'content': TOKEN_RESPONSE, 'status_code': 200}
if url.path == '/clu/ws/demanderCarte':
request_json = json_loads(request.body)
if request_json.get('simulate_error') == 'doublon':
error = {'erreur': 'Demande 113-9166 : 1 demande(s) ...'}
return {'content': json.dumps(error), 'status_code': 409}
elif request_json.get('simulate_error') == 'num_serie':
error = {'statut': 'ERREUR_NUM_SERIE', 'erreur': '... pas valide'}
return {'content': json.dumps(error), 'status_code': 404}
content = {
'n_demande_clu': 10000005,
'request': json_loads(request.body), # for tests
'request': request_json, # for tests
}
return {'content': json.dumps(content), 'status_code': 200}
if url.path.startswith('/clu/ws/consulterDemande/'):
@ -57,6 +64,7 @@ def test_csp(app, connector):
resp = app.get(endpoint)
assert resp.json.get('data')
def test_card_request(app, connector):
endpoint = utils.generic_endpoint_url('lille-urban-card', 'card_request', slug=connector.slug)
with HTTMock(mocked_http):
@ -79,6 +87,35 @@ def test_card_request(app, connector):
assert request['services'] == [{'service': 'zoo', 'newsletter': 0}]
assert resp.json['data']['n_demande_clu'] == 10000005
# error handling
resp = app.post_json(endpoint, params={
'simulate_error': 'doublon',
'civilite': 'Monsieur',
'code_postal': '59000',
'ville': 'Lille',
'photo': {'content': 'xxx'},
'telephone': '01.02.03.04.05',
'recevoir_journal_senior': 'Non',
'service_zoo': 'Oui',
'service_zoo_newsletter': 'Non',
}, status=200)
assert resp.json['data']['status_code'] == 409
resp = app.post_json(endpoint, params={
'simulate_error': 'num_serie',
'civilite': 'Monsieur',
'code_postal': '59000',
'ville': 'Lille',
'photo': {'content': 'xxx'},
'telephone': '01.02.03.04.05',
'recevoir_journal_senior': 'Non',
'service_zoo': 'Oui',
'service_zoo_newsletter': 'Non',
}, status=200)
assert resp.json['data']['status_code'] == 404
assert resp.json['data']['statut'] == 'ERREUR_NUM_SERIE'
def test_card_status(app, connector):
endpoint = utils.generic_endpoint_url('lille-urban-card', 'card_status', slug=connector.slug)
with HTTMock(mocked_http):