diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py index e1619918..ef533a46 100644 --- a/passerelle/contrib/toulouse_maelis/models.py +++ b/passerelle/contrib/toulouse_maelis/models.py @@ -3282,6 +3282,23 @@ class ToulouseMaelis(BaseResource, HTTPResource): post={'request_body': {'schema': {'application/json': family_schemas.NURSERY_DEMAND_SCHEMA}}}, ) def create_nursery_demand(self, request, post_data): + apeIndicators = self.get_referential('ApeIndicator') + for group in apeIndicators: + if group['id'] == 'INDI_APE_ENF': + key = 'child_indicators' + elif group['id'] == 'INDI_APE_FAM': + key = 'family_indicators' + else: + key = 'demand_indicators' + expected_codes = [x['code'] for x in group['indicatorList']] + for i, item in enumerate(post_data.get(key) or []): + if item['code'] not in expected_codes: + raise APIError( + "%s/%i/code key value '%s' do not belong to APE '%s' indicators" + % (key, i, item['code'], group['id'][-3:]) + ) + item['isActive'] = self.encode_bool(item['isActive']) + child_data = {} if post_data.get('child_id'): child_data['numPerson'] = post_data['child_id'] diff --git a/tests/test_toulouse_maelis.py b/tests/test_toulouse_maelis.py index 03fd712c..64e36a60 100644 --- a/tests/test_toulouse_maelis.py +++ b/tests/test_toulouse_maelis.py @@ -7678,7 +7678,20 @@ def test_get_nursery_geojson(con, app): def test_create_nursery_demand(ape_service, con, app): - ape_service.add_soap_response('addApeBook', get_xml_file('R_create_nursery_demand.xml')) + def request_check(request): + assert [(x['code'], x['isActive']) for x in request.child['indiPersList']] == [ + ('APE_ALLO', True), + ('APE-MINE', False), + ] + assert [(x['code'], x['isActive']) for x in request.apeBook['indiResapeList']] == [ + ('APE_FIRSTC', True), + ('APE_FRAT', False), + ] + assert [(x['code'], x['isActive']) for x in request['indiFamList']] == [('APE_COMPO1', False)] + + ape_service.add_soap_response( + 'addApeBook', get_xml_file('R_create_nursery_demand.xml'), request_check=request_check + ) data = { 'family_id': '322425', 'accept_other_nurseries': False, @@ -7691,14 +7704,14 @@ def test_create_nursery_demand(ape_service, con, app): 'number_of_days': '1', 'child_indicators/0/code': 'APE_ALLO', 'child_indicators/0/isActive': True, - 'child_indicators/1/code': 'code2', + 'child_indicators/1/code': 'APE-MINE', 'child_indicators/1/isActive': False, - 'demand_indicators/0/code': 'APE_ALLO', - 'demand_indicators/0/isActive': True, - 'demand_indicators/1/code': 'APE_ALLO', - 'demand_indicators/1/isActive': False, - 'family_indicators/0/code': 'APE_ALLO', - 'family_indicators/0/isActive': False, + 'demand_indicators/0/code': 'APE_FIRSTC', + 'demand_indicators/0/isActive': 'Oui', + 'demand_indicators/1/code': 'APE_FRAT', + 'demand_indicators/1/isActive': 0, + 'family_indicators/0/code': 'APE_COMPO1', + 'family_indicators/0/isActive': 'False', 'start_hour_Mon': '09:00', 'end_hour_Mon': '18:00', 'nursery1/idActivity': 'M10000000004', @@ -7713,3 +7726,20 @@ def test_create_nursery_demand(ape_service, con, app): data['start_hour_Tue'] = '' resp = app.post_json(url, params=data) assert resp.json['err'] == 0 + + +def test_create_nursery_demand_wrong_referential_key_error(con, app): + url = get_endpoint('create-nursery-demand') + params = { + 'family_id': '322425', + 'start_date': '2023-04-01', + 'family_indicators/0/code': 'APE_ALLO', + 'family_indicators/0/isActive': 'False', + } + + resp = app.post_json(url, params=params) + assert resp.json['err'] == 1 + assert ( + resp.json['err_desc'] + == "family_indicators/0/code key value 'APE_ALLO' do not belong to APE 'FAM' indicators" + )