toulouse-maelis: check read-schools-for-address-and-level parameters (#79211)
gitea/passerelle/pipeline/head This commit looks good Details

This commit is contained in:
Nicolas Roche 2023-06-29 11:04:30 +02:00 committed by Nicolas Roche
parent 1a37984298
commit 7cbd27afd3
4 changed files with 100 additions and 45 deletions

View File

@ -44,6 +44,7 @@ from passerelle.utils.conversion import simplify
from passerelle.utils.jsonresponse import APIError
from passerelle.utils.soap import SOAPFault, SOAPServiceUnreachable
from passerelle.utils.templates import render_to_string
from passerelle.utils.validation import is_number
from passerelle.utils.wcs import WcsApi, WcsApiError
from . import activity_schemas, family_schemas, invoice_schemas, schemas, utils
@ -2562,14 +2563,25 @@ class ToulouseMaelis(BaseResource, HTTPResource):
'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
def read_schools_for_address_and_level(self, request, id_street, year, num=None, comp=None, level=None):
self.assert_key_in_referential('Street', id_street, 'id_street parameter', required=True)
self.assert_key_in_referential('Complement', comp, 'comp parameter', required=False)
self.assert_key_in_referential('Level', level, 'level parameter', required=False)
if num and not is_number(num):
raise APIError('num parameter should be a number')
response = self.call(
'Site', 'readSchoolForAdressAndLevel', readSchoolForAdressAndLevelRequestBean=data
'Site',
'readSchoolForAdressAndLevel',
readSchoolForAdressAndLevelRequestBean={
'schoolYear': year,
'levelCode': level,
'adresse': {
'idStreet': id_street,
'num': num,
'numComp': comp,
},
},
)
data = []
for item in response:

View File

@ -37,5 +37,5 @@ if __name__ == '__main__':
parser.add_argument('--level', '-l', default=LEVEL, help='level (facultatif, ex: CP)')
parser.add_argument('--street', '-s', default=STREET, help='street id (ex: 2317)')
parser.add_argument('--num', '-n', default=NUM, help='house number (ex: 4)')
parser.add_argument('--num_comp', '-c', default=NUM_COMP, help='house number complement (ex: bis)')
parser.add_argument('--num_comp', '-c', default=NUM_COMP, help='house number complement (ex: B)')
check(parser.parse_args())

View File

@ -1,14 +0,0 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>E19 : La voie est obligatoire</faultstring>
<detail>
<ns1:MaelisSiteException xmlns:ns1="site.ws.maelis.sigec.com">
<message xmlns:ns2="site.ws.maelis.sigec.com">E19 : La voie est obligatoire</message>
<code xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="site.ws.maelis.sigec.com" xsi:nil="true"/>
</ns1:MaelisSiteException>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>

View File

@ -6028,43 +6028,100 @@ def test_read_school_list_address_and_level(site_service, con, app):
'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'})
params = {
'year': '2022',
'level': 'CP',
'id_street': '2317',
'num': '4',
'comp': 'B',
}
resp = app.get(url, params=params)
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
params = {
'year': '2022',
'level': '',
'id_street': '2317',
'num': '',
'comp': '',
}
resp = app.get(url, params=params)
assert resp.json['err'] == 0
def test_read_school_list_address_and_level_soap_error(site_service, con, app):
site_service.add_soap_response(
'readSchoolForAdressAndLevel',
get_xml_file('R_read_school_for_adress_and_level_soap_error.xml'),
status=500,
)
def test_read_schools_for_address_and_level_empty_referential_key_error(con, app):
url = get_endpoint('read-schools-for-address-and-level')
resp = app.get(url, params={'id_street': '', 'num': '', 'year': ''})
params = {
'year': '2022',
'level': 'CP',
'id_street': '',
'num': '4',
'comp': 'B',
}
resp = app.get(url, params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'id_street parameter is required and could not be None'
def test_read_schools_for_address_and_level_wrong_referential_key_error(con, app):
url = get_endpoint('read-schools-for-address-and-level')
params = {
'year': '2022',
'level': 'plop',
'id_street': '2317',
'num': '4',
'comp': 'B',
}
resp = app.get(url, params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == "level parameter key value 'plop' do not belong to 'Level' referential"
params = {
'year': '2022',
'level': 'CP',
'id_street': 'plop',
'num': '4',
'comp': 'B',
}
resp = app.get(url, params=params)
assert resp.json['err'] == 1
assert (
resp.json['err_desc']
== 'SOAP service at https://example.org/SiteService?wsdl returned an error "E19 : La voie est obligatoire"'
== "id_street parameter key value 'plop' do not belong to 'Street' required referential"
)
assert resp.json['data'] == {
'soap_fault': {
'message': 'E19 : La voie est obligatoire',
'code': 'soap:Server',
'actor': None,
'detail': '<detail xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'
+ '\n <ns1:MaelisSiteException xmlns:ns1="site.ws.maelis.sigec.com">'
+ '\n <message xmlns:ns2="site.ws.maelis.sigec.com">E19 : La voie est obligatoire</message>'
+ '\n <code xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
+ ' xmlns:ns2="site.ws.maelis.sigec.com" xsi:nil="true"/>'
+ '\n </ns1:MaelisSiteException>\n </detail>'
+ '\n ',
'subcodes': None,
}
params = {
'year': '2022',
'level': 'CP',
'id_street': '2317',
'num': 'plop',
'comp': 'B',
}
resp = app.get(url, params=params)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'num parameter should be a number'
params = {
'year': '2022',
'level': 'CP',
'id_street': '2317',
'num': '4',
'comp': 'plop',
}
resp = app.get(url, params=params)
assert resp.json['err'] == 1
assert (
resp.json['err_desc'] == "comp parameter key value 'plop' do not belong to 'Complement' referential"
)
def test_read_school_list_child_and_level(family_service, con, app):
family_service.add_soap_response(