diff --git a/passerelle/apps/api_particulier/models.py b/passerelle/apps/api_particulier/models.py index 70de9b13..e9638ea7 100644 --- a/passerelle/apps/api_particulier/models.py +++ b/passerelle/apps/api_particulier/models.py @@ -170,11 +170,13 @@ class APIParticulier(BaseResource): }, }) def v2_avis_imposition(self, request, numero_fiscal, reference_avis, user=None): - if not numero_fiscal.strip() or not reference_avis.strip(): - raise APIError('missing numero_fiscal or reference_avis', status_code=400) + numero_fiscal = numero_fiscal.strip()[:13] + reference_avis = reference_avis.strip()[:13] + if len(numero_fiscal) < 13 or len(reference_avis) < 13: + raise APIError('bad numero_fiscal or reference_avis, must be 13 chars long', status_code=400) return self.get('v2/avis-imposition', params={ 'numeroFiscal': numero_fiscal, - 'referenceAvis': reference_avis[:13], + 'referenceAvis': reference_avis, }, user=user) @endpoint(perm='can_access', diff --git a/tests/test_api_particulier.py b/tests/test_api_particulier.py index c043f4dc..3744d23b 100644 --- a/tests/test_api_particulier.py +++ b/tests/test_api_particulier.py @@ -155,8 +155,8 @@ def resource(db): def test_error(app, resource, mock_api_particulier): vector = [ (['impots_svair', 'avis-imposition'], { - 'numero_fiscal': 12, - 'reference_avis': 15, + 'numero_fiscal': '1234567890123', + 'reference_avis': '3210987654321', }), (['caf_famille', 'situation-familiale'], { 'code_postal': 12, @@ -223,6 +223,35 @@ def test_error(app, resource, mock_api_particulier): for endpoint in endpoints: do(endpoint, params) + resp = endpoint_get( + '/api-particulier/test/avis-imposition', + app, + resource, + 'avis-imposition', + params={ + 'numero_fiscal': ' 1234567890', # too short + 'reference_avis': '3210987654321', + 'user': 'John Doe', + }) + assert resp.status_code == 200 + assert resp.json['err'] == 1 + assert resp.json['data'] is None + assert 'must be 13 chars long' in resp.json['err_desc'] + resp = endpoint_get( + '/api-particulier/test/avis-imposition', + app, + resource, + 'avis-imposition', + params={ + 'numero_fiscal': '1234567890123', + 'reference_avis': '32109876543 ', # too short + 'user': 'John Doe', + }) + assert resp.status_code == 200 + assert resp.json['err'] == 1 + assert resp.json['data'] is None + assert 'must be 13 chars long' in resp.json['err_desc'] + def test_avis_imposition(app, resource, mock_api_particulier): resp = endpoint_get( @@ -231,11 +260,27 @@ def test_avis_imposition(app, resource, mock_api_particulier): resource, 'avis-imposition', params={ - 'numero_fiscal': 12, - 'reference_avis': 15, + 'numero_fiscal': '1234567890123', + 'reference_avis': '3210987654321', 'user': 'John Doe', }) + assert resp.status_code == 200 assert resp.json['data']['montantImpot'] == 2165 + assert resp.json['err'] == 0 + + resp = endpoint_get( + '/api-particulier/test/avis-imposition', + app, + resource, + 'avis-imposition', + params={ + 'numero_fiscal': '1234567890123X', # 14 chars : will be cutted + 'reference_avis': '3210987654321X', # idem + 'user': 'John Doe', + }) + assert resp.status_code == 200 + assert resp.json['data']['montantImpot'] == 2165 + assert resp.json['err'] == 0 def test_situation_familiale(app, resource, mock_api_particulier): @@ -276,8 +321,8 @@ def test_api_particulier_dont_log_not_found(app, resource, mock, should_log): resource, 'avis-imposition', params={ - 'numero_fiscal': 12, - 'reference_avis': 15, + 'numero_fiscal': '1234567890123', + 'reference_avis': '3210987654321', }) logs = ResourceLog.objects.all() assert logs.count() == 3