diff --git a/passerelle/contrib/toulouse_maelis/models.py b/passerelle/contrib/toulouse_maelis/models.py index 1a606d41..0b909499 100644 --- a/passerelle/contrib/toulouse_maelis/models.py +++ b/passerelle/contrib/toulouse_maelis/models.py @@ -1921,6 +1921,35 @@ class ToulouseMaelis(BaseResource, HTTPResource): def read_exemption_reasons_list(self, request): return {'data': self.get_referential('DerogReason')} + @endpoint( + display_category='Inscriptions', + description="Liste les écoles pour une adresse et niveau scolaire", + name='read-schools-for-address-and-level', + perm='can_access', + parameters={ + 'year': {'description': 'Année', 'example_value': '2022'}, + 'id_street': {'description': 'Identifiant de la voie', 'example_value': '2317'}, + 'num': {'description': 'Numero dans la voie', 'example_value': '4'}, + 'comp': {'description': 'Complément d\'adresse (bis, ...)'}, + 'level': {'description': 'Niveau scolaire'}, + }, + ) + def read_schools_for_address_and_level(self, request, id_street, year, num, comp=None, level=None): + data = {'schoolYear': year, 'adresse': {'idStreet': id_street, 'num': num}} + if level: + data['levelCode'] = level + if comp: + data['adresse']['numComp'] = comp + response = self.call( + 'Site', 'readSchoolForAdressAndLevel', readSchoolForAdressAndLevelRequestBean=data + ) + data = [] + for item in serialize_object(response): + item['id'] = item['idSchool'] + item['text'] = item['schoolName'] + data.append(item) + return {'data': serialize_object(data)} + class Link(models.Model): resource = models.ForeignKey(ToulouseMaelis, on_delete=models.CASCADE) diff --git a/tests/data/toulouse_maelis/R_read_school_for_adress_and_level.xml b/tests/data/toulouse_maelis/R_read_school_for_adress_and_level.xml new file mode 100644 index 00000000..4cd83623 --- /dev/null +++ b/tests/data/toulouse_maelis/R_read_school_for_adress_and_level.xml @@ -0,0 +1,62 @@ + + + + + MMATERNELLESection petitPS2465CALAS MATERNELLE + + RUE ACHILLE VIADIEU31400TOULOUSE + + FREZOULS CAROLINE + + + MMATERNELLESection moyenMS2465CALAS MATERNELLE + + RUE ACHILLE VIADIEU31400TOULOUSE + + FREZOULS CAROLINE + + + MMATERNELLESection grandGS2465CALAS MATERNELLE + + RUE ACHILLE VIADIEU31400TOULOUSE + + FREZOULS CAROLINE + + + EELEMENTAIRECours préparatoireCP2435DUPONT PIERRE ELEMENTAIRE + + GRANDE-RUE SAINT MICHEL31400TOULOUSE + + FOURCADE MARIE-SYLVIE + + + EELEMENTAIRECours élémentaire 1CE12435DUPONT PIERRE ELEMENTAIRE + + GRANDE-RUE SAINT MICHEL31400TOULOUSE + + FOURCADE MARIE-SYLVIE + + + EELEMENTAIRECours élémentaire 2CE22435DUPONT PIERRE ELEMENTAIRE + + GRANDE-RUE SAINT MICHEL31400TOULOUSE + + FOURCADE MARIE-SYLVIE + + + EELEMENTAIRECours moyen 1CM12435DUPONT PIERRE ELEMENTAIRE + + GRANDE-RUE SAINT MICHEL31400TOULOUSE + + FOURCADE MARIE-SYLVIE + + + EELEMENTAIRECours moyen 2CM22435DUPONT PIERRE ELEMENTAIRE + + GRANDE-RUE SAINT MICHEL31400TOULOUSE + + FOURCADE MARIE-SYLVIE + + + + diff --git a/tests/test_toulouse_maelis.py b/tests/test_toulouse_maelis.py index b42b362e..48bd7ac7 100644 --- a/tests/test_toulouse_maelis.py +++ b/tests/test_toulouse_maelis.py @@ -4297,3 +4297,16 @@ def test_update_child_agenda_date_error(con, app): resp = app.post_json(url + '?NameID=local', params=params, status=400) assert resp.json['err'] == 'bad-request' assert resp.json['err_desc'] == 'start_date and end_date are in different reference year (2022 != 2023)' + + +def test_read_school_list_address_and_level(site_service, con, app): + site_service.add_soap_response( + 'readSchoolForAdressAndLevel', get_xml_file('R_read_school_for_adress_and_level.xml') + ) + url = get_endpoint('read-schools-for-address-and-level') + resp = app.get(url, params={'id_street': '2317', 'num': '4', 'year': '2022'}) + assert resp.json['err'] == 0 + assert len(resp.json['data']) == 8 + for item in resp.json['data']: + assert 'id' in item + assert 'text' in item