toulouse_maelis: add a basket id parameter to basket endpoints (#75535)
gitea/passerelle/pipeline/head This commit looks good Details

This commit is contained in:
Nicolas Roche 2023-03-19 20:54:17 +01:00
parent 2b5eb786dc
commit 57b9c49afb
3 changed files with 116 additions and 66 deletions

View File

@ -145,15 +145,33 @@ SUBSCRIPTION_SCHEMA = {
'unflatten': True,
}
DELETE_BASKET_LINE_SCHEMA = {
BASKET_SCHEMA = {
'type': 'object',
'properties': {
'line_id': {
'basket_id': {
'type': 'string',
'pattern': '[A-Za-z0-9]+',
'pattern': '^[A-Za-z0-9]+$',
},
},
'required': [
'basket_id',
],
}
BASKET_LINE_SCHEMA = {
'type': 'object',
'properties': {
'basket_id': {
'type': 'string',
'pattern': '^[A-Za-z0-9]+$',
},
'line_id': {
'type': 'string',
'pattern': '^[A-Za-z0-9]+$',
},
},
'required': [
'basket_id',
'line_id',
],
}

View File

@ -582,6 +582,12 @@ class ToulouseMaelis(BaseResource, HTTPResource):
or []
)
def get_basket_raw(self, family_id, basket_id):
for basket in self.get_baskets_raw(family_id):
if basket['id'] == basket_id:
return basket
raise APIError("no '%s' basket on family" % basket_id)
@endpoint(
display_category='Famille',
description='Lister les catégories',
@ -3117,15 +3123,13 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'},
},
methods=['post'],
post={'request_body': {'schema': {'application/json': activity_schemas.BASKET_SCHEMA}}},
)
def update_basket_time(self, request, NameID=None, family_id=None):
def update_basket_time(self, request, post_data, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id)
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
self.get_basket_raw(family_id, post_data['basket_id'])
self.call('Activity', 'updateBasketTime', idBasket=basket['id'])
self.call('Activity', 'updateBasketTime', idBasket=post_data['basket_id'])
return {'data': 'ok'}
@endpoint(
@ -3137,25 +3141,22 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'},
},
post={'request_body': {'schema': {'application/json': activity_schemas.DELETE_BASKET_LINE_SCHEMA}}},
post={'request_body': {'schema': {'application/json': activity_schemas.BASKET_LINE_SCHEMA}}},
)
def delete_basket_line(self, request, post_data, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id)
line_id = post_data['line_id']
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
basket = self.get_basket_raw(family_id, post_data['basket_id'])
for line in basket['lignes']:
if line['id'] == line_id:
if line['id'] == post_data['line_id']:
break
else:
raise APIError("no '%s' basket line on '%s' family" % (line_id, family_id))
raise APIError("no '%s' basket line on basket" % post_data['line_id'])
response = self.call(
'Activity',
'deletePersonUnitBasket',
deletePersonUnitBasketRequestBean={
'idBasketLine': line_id,
'idBasketLine': post_data['line_id'],
},
)
return {'data': response}
@ -3169,19 +3170,17 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'},
},
methods=['post'],
post={'request_body': {'schema': {'application/json': activity_schemas.BASKET_SCHEMA}}},
)
def delete_basket(self, request, NameID=None, family_id=None):
def delete_basket(self, request, post_data, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id)
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
self.get_basket_raw(family_id, post_data['basket_id'])
self.call(
'Activity',
'deleteBasket',
deleteBasketRequestBean={
'idBasket': basket['id'],
'idBasket': post_data['basket_id'],
'idUtilisat': NameID or 'Middle-office',
},
)
@ -3196,19 +3195,17 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'NameID': {'description': 'Publik NameID'},
'family_id': {'description': 'Numéro de DUI'},
},
methods=['post'],
post={'request_body': {'schema': {'application/json': activity_schemas.BASKET_SCHEMA}}},
)
def validate_basket(self, request, NameID=None, family_id=None):
def validate_basket(self, request, post_data, NameID=None, family_id=None):
family_id = family_id or self.get_link(NameID).family_id
basket = self.get_basket_raw(family_id)
if not basket or not basket.get('id'):
raise APIError("no basket on '%s' family" % family_id)
self.get_basket_raw(family_id, post_data['basket_id'])
response = self.call(
'Activity',
'validateBasket',
validateBasketRequestBean={
'idBasket': basket['id'],
'idBasket': post_data['basket_id'],
},
)
return {'data': response}

View File

@ -7400,45 +7400,54 @@ def test_get_baskets_no_basket(activity_service, con, app):
assert resp.json['data'] == []
@pytest.mark.xfail(run=False)
def test_update_basket_time(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
activity_service.add_soap_response('updateBasketTime', get_xml_file('R_update_basket_time.xml'))
url = get_endpoint('update-basket-time')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352')
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='311352', name_id='local')
resp = app.post_json(url + '?NameID=local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0
assert resp.json['data'] == 'ok'
def test_update_basket_time_not_linked_error(con, app):
url = get_endpoint('update-basket-time')
resp = app.post_json(url + '?NameID=local')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family'
@pytest.mark.xfail(run=False)
def test_update_basket_time_basket_not_found(activity_service, con, app):
def test_update_basket_time_no_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('update-basket-time')
resp = app.post_json(url + '?family_id=311352')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family"
assert resp.json['err_desc'] == "no 'S10053200723' basket on family"
def test_update_basket_time_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('update-basket-time')
params = {'basket_id': 'plop'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket on family"
@pytest.mark.xfail(run=False)
def test_delete_basket_line(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
activity_service.add_soap_response(
'deletePersonUnitBasket', get_xml_file('R_delete_person_unit_basket.xml')
)
url = get_endpoint('delete-basket-line')
params = {'line_id': 'S10053203120'}
params = {'basket_id': 'S10053200723', 'line_id': 'S10053203120'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 0
@ -7446,39 +7455,45 @@ def test_delete_basket_line(activity_service, con, app):
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0
assert len(resp.json['data']['lignes']) == 2
assert len(resp.json['data']['lignes']) == 2 # return the basket
assert 'S10053203120' not in [x['id'] for x in resp.json['data']['lignes']]
def test_delete_basket_line_not_linked_error(con, app):
url = get_endpoint('delete-basket-line')
params = {'line_id': 'S10053203120'}
params = {'basket_id': 'S10053200723', 'line_id': 'S10053203120'}
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family'
@pytest.mark.xfail(run=False)
def test_delete_basket_line_basket_not_found(activity_service, con, app):
def test_delete_basket_line_no_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('delete-basket-line')
params = {'line_id': 'S10053203120'}
params = {'basket_id': 'S10053200723', 'line_id': 'S10053203120'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family"
assert resp.json['err_desc'] == "no 'S10053200723' basket on family"
def test_delete_basket_line_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('delete-basket-line')
params = {'basket_id': 'plop', 'line_id': 'S10053203120'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket on family"
@pytest.mark.xfail(run=False)
def test_delete_basket_line_line_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('delete-basket-line')
params = {'line_id': 'plop'}
params = {'basket_id': 'S10053200723', 'line_id': 'plop'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket line on '311352' family"
assert resp.json['err_desc'] == "no 'plop' basket line on basket"
@pytest.mark.xfail(run=False)
def test_delete_basket(activity_service, con, app):
def request_check(request):
assert request.idUtilisat in ('local', 'Middle-office')
@ -7490,66 +7505,86 @@ def test_delete_basket(activity_service, con, app):
request_check=request_check,
)
url = get_endpoint('delete-basket')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352')
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='311352', name_id='local')
resp = app.post_json(url + '?NameID=local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0
assert resp.json['data'] == 'ok'
def test_delete_basket_not_linked_error(con, app):
url = get_endpoint('delete-basket')
resp = app.post_json(url + '?NameID=local')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family'
@pytest.mark.xfail(run=False)
def test_delete_basket_not_found(activity_service, con, app):
def test_delete_basket_no_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('delete-basket')
resp = app.post_json(url + '?family_id=311352')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family"
assert resp.json['err_desc'] == "no 'S10053200723' basket on family"
def test_delete_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('delete-basket')
params = {'basket_id': 'plop'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket on family"
@pytest.mark.xfail(run=False)
def test_validate_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
activity_service.add_soap_response('validateBasket', get_xml_file('R_validate_basket.xml'))
url = get_endpoint('validate-basket')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352')
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 0
Link.objects.create(resource=con, family_id='311352', name_id='local')
resp = app.post_json(url + '?NameID=local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 0
assert resp.json['data'] == {
'idFam': 'S10053183425',
'idFactureLst': [],
'factureLst': [],
'idInsLst': ['S10053203103', 'S10053200721'],
'paramUrlReglement': [],
}
def test_validate_basket_not_linked_error(con, app):
url = get_endpoint('validate-basket')
resp = app.post_json(url + '?NameID=local')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'User not linked to family'
@pytest.mark.xfail(run=False)
def test_validate_basket_not_found(activity_service, con, app):
def test_validate_basket_no_basket(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket_empty.xml'))
url = get_endpoint('validate-basket')
resp = app.post_json(url + '?family_id=311352')
params = {'basket_id': 'S10053200723'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no basket on '311352' family"
assert resp.json['err_desc'] == "no 'S10053200723' basket on family"
def test_validate_basket_not_found(activity_service, con, app):
activity_service.add_soap_response('getFamilyBasket', get_xml_file('R_get_family_basket.xml'))
url = get_endpoint('validate-basket')
params = {'basket_id': 'plop'}
resp = app.post_json(url + '?family_id=311352', params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "no 'plop' basket on family"
def test_read_nursery_list(con, app):