api_particulier: verify avis-imposition args, must be 13 chars long (#44683)

This commit is contained in:
Thomas NOËL 2020-07-01 16:57:45 +02:00 committed by Thomas NOËL
parent b1cab1d592
commit 029e107533
2 changed files with 56 additions and 9 deletions

View File

@ -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',

View File

@ -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