toulouse-maelis: check input referential keys (#70075)
gitea-wip/passerelle/pipeline/head Build started... Details
gitea/passerelle/pipeline/head Something is wrong with the build of this commit Details

This commit is contained in:
Nicolas Roche 2022-10-20 02:01:18 +02:00
parent 45ae4d3cf3
commit ae85feec89
2 changed files with 486 additions and 40 deletions

View File

@ -244,6 +244,111 @@ class ToulouseMaelis(BaseResource, HTTPResource):
self.add_text_value_to_family(data)
return data
def assert_key_in_referential(self, referential_name, key_value, keys_text, required=True):
if not key_value:
if required:
raise APIError("%s is required and could not be None" % keys_text, err_code='field-required')
return
if key_value not in self.get_referential(referential_name)['dict']:
ref_text = "required " if required else ""
ref_text = ref_text + "referential"
raise APIError(
"%s key value '%s' do not belong to '%s' %s"
% (keys_text, key_value, referential_name, ref_text),
err_code='wrong-key',
)
def assert_post_data_in_referential(self, referential_name, data, keys, required=True):
key_value = None
for key in keys:
if not (isinstance(data, list) and isinstance(key, int)) and not (
isinstance(data, dict) and key in data
):
break
data = data[key]
else:
key_value = data
self.assert_key_in_referential(referential_name, key_value, '/'.join(str(x) for x in keys), required)
def assert_child_medical_record_payload_in_referential(self, post_data, parent_keys=None):
keys = parent_keys or []
data = post_data
for key in keys:
data = data[key]
for i in range(0, len(data['vaccinList']) or []):
self.assert_post_data_in_referential(
'Vaccin', post_data, keys + ['vaccinList', i, 'code'], required=False
)
def assert_child_pai_payoad_in_referential(self, post_data, parent_keys=None):
keys = parent_keys or []
self.assert_post_data_in_referential('PAI', post_data, keys + ['code'])
def assert_child_person_payload_in_referential(self, post_data, parent_keys=None):
keys = parent_keys or []
self.assert_post_data_in_referential(
'Civility', post_data, keys + ['personInfo', 'civility'], required=False
)
self.assert_post_data_in_referential('Sex', post_data, keys + ['personInfo', 'sexe'], required=False)
self.assert_post_data_in_referential('Quality', post_data, keys + ['personQuality', 'code'])
def assert_child_payload_in_referential(self, post_data, parent_keys=None):
keys = parent_keys or []
self.assert_post_data_in_referential('Sex', post_data, keys + ['sexe'])
for i in range(0, len(post_data.get('authorizedPersonList') or [])):
self.assert_person_payload_in_referential(post_data, keys + ['authorizedPersonList', i])
data = post_data
for key in keys:
data = data[key]
if 'dietcode' in data:
self.assert_post_data_in_referential('DietCode', post_data, keys + ['dietcode'])
if 'paiInfoBean' in data:
self.assert_child_pai_payoad_in_referential(post_data, keys + ['paiInfoBean'])
if 'medicalRecord' in data:
# dead code as updateFamily seems not to modify medicalRecord
self.assert_child_medical_record_payload_in_referential(post_data, keys + ['medicalRecord'])
def assert_person_payload_in_referential(self, post_data, parent_keys=None):
keys = parent_keys or []
self.assert_post_data_in_referential('Civility', post_data, keys + ['civility'], required=False)
self.assert_post_data_in_referential('Sex', post_data, keys + ['sexe'], required=False)
self.assert_post_data_in_referential('Quality', post_data, keys + ['quality'])
def assert_update_coordinate_payload_in_referential(self, post_data, parent_keys=None):
keys = parent_keys or []
self.assert_post_data_in_referential(
'Complement', post_data, keys + ['adresse', 'numComp'], required=False
)
self.assert_post_data_in_referential(
'CSP', post_data, keys + ['profession', 'codeCSP'], required=False
)
self.assert_post_data_in_referential('Organ', post_data, keys + ['CAFInfo', 'organ'], required=False)
def assert_rl_payload_in_referential(self, post_data, parent_keys=None):
keys = parent_keys or []
self.assert_post_data_in_referential('Civility', post_data, keys + ['civility'])
self.assert_post_data_in_referential('Quality', post_data, keys + ['quality'])
self.assert_update_coordinate_payload_in_referential(post_data, keys)
def assert_create_rl1_payload_in_referential(self, post_data):
self.assert_post_data_in_referential('Category', post_data, ['categorie'])
self.assert_post_data_in_referential('Situation', post_data, ['situation'])
self.assert_rl_payload_in_referential(post_data, ['rl1'])
def assert_family_payload_in_referential(self, post_data):
self.assert_post_data_in_referential('Category', post_data, ['categorie'])
self.assert_post_data_in_referential('Situation', post_data, ['situation'])
for rlg in 'rl1', 'rl2':
if rlg in post_data:
self.assert_rl_payload_in_referential(post_data, [rlg])
for i in range(0, len(post_data.get('emergencyPersonList') or [])):
self.assert_person_payload_in_referential(post_data, ['emergencyPersonList', i])
for i in range(0, len(post_data.get('childList') or [])):
self.assert_child_payload_in_referential(post_data, ['childList', i])
def replace_null_values(self, dico):
'''send null fields as empty SOAP tag to tell maelis to empty the value'''
for key, value in dico.items():
@ -509,6 +614,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def create_family(self, request, NameID, post_data):
if self.link_set.filter(name_id=NameID).exists():
raise APIError('User already linked to family', err_code='already-linked')
self.assert_family_payload_in_referential(post_data)
response = self.call('Family', 'createFamily', **post_data)
data = serialize_object(response)
@ -531,6 +637,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
)
def update_family(self, request, NameID, post_data):
family_id = self.get_link(NameID).family_id
self.assert_family_payload_in_referential(post_data)
self.replace_null_values(post_data)
response = self.call('Family', 'updateFamily', dossierNumber=family_id, **post_data)
@ -553,6 +660,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def create_rl1(self, request, NameID, post_data):
if self.link_set.filter(name_id=NameID).exists():
raise APIError('User already linked to family', err_code='already-linked')
self.assert_create_rl1_payload_in_referential(post_data)
response = self.call('Family', 'createFamily', **post_data)
data = serialize_object(response)
@ -575,6 +683,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def update_rl1(self, request, NameID, post_data):
family_id = self.get_link(NameID).family_id
family = self.get_family_raw(family_id)
self.assert_rl_payload_in_referential(post_data)
self.replace_null_values(post_data)
rl1 = post_data
@ -606,6 +715,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
family = self.get_family_raw(family_id)
if family['RL2']:
raise APIError('RL2 already defined on family', err_code='already-rl2')
self.assert_rl_payload_in_referential(post_data)
payload = {
'dossierNumber': family_id,
@ -633,6 +743,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
family = self.get_family_raw(family_id)
if not family['RL2']:
raise APIError('No RL2 to update on family', err_code='no-rl2')
self.assert_rl_payload_in_referential(post_data)
self.replace_null_values(post_data)
rl2 = post_data
@ -668,6 +779,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
)
def create_child(self, request, NameID, post_data, force=False):
family_id = self.get_link(NameID).family_id
self.assert_update_coordinate_payload_in_referential(post_data)
payload = {
'numDossier': family_id,
@ -698,6 +810,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
family = self.get_family_raw(family_id)
if child_id not in [x['num'] for x in family['childList']]:
raise APIError('No child %s to update on family' % child_id, err_code='no-child')
self.assert_child_payload_in_referential(post_data)
self.replace_null_values(post_data)
child = post_data
@ -728,6 +841,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
)
def update_coordinate(self, request, NameID, rl_id, post_data):
family_id = self.get_link(NameID).family_id
self.assert_update_coordinate_payload_in_referential(post_data)
self.replace_null_values(post_data)
self.call('Family', 'updateCoordinate', numDossier=family_id, numPerson=rl_id, **post_data)
@ -746,6 +860,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def create_person(self, request, NameID, post_data):
family_id = self.get_link(NameID).family_id
family = self.get_family_raw(family_id)
self.assert_person_payload_in_referential(post_data)
personList = family['emergencyPersonList']
personList.append(post_data)
@ -776,6 +891,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def update_person(self, request, NameID, person_id, post_data):
family_id = self.get_link(NameID).family_id
family = self.get_family_raw(family_id)
self.assert_person_payload_in_referential(post_data)
personList = family['emergencyPersonList']
for i, person in enumerate(personList):
@ -851,6 +967,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def create_child_person(self, request, NameID, child_id, post_data):
family_id = self.get_link(NameID).family_id
child = self.get_child_raw(family_id, child_id)
self.assert_child_person_payload_in_referential(post_data)
personList = child['authorizedPersonList']
personList.append(post_data)
@ -879,6 +996,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
def update_child_person(self, request, NameID, child_id, person_id, post_data):
family_id = self.get_link(NameID).family_id
child = self.get_child_raw(family_id, child_id)
self.assert_child_person_payload_in_referential(post_data)
personList = child['authorizedPersonList']
for i, person in enumerate(personList):
@ -949,6 +1067,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
)
def update_child_dietcode(self, request, NameID, child_id, dietcode):
self.get_link(NameID)
self.assert_key_in_referential('DietCode', dietcode, 'dietcode parameter')
self.call('Family', 'createOrUpdateChildDiet', personNumber=child_id, code=dietcode)
return {'data': 'ok'}
@ -966,6 +1085,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
)
def update_child_pai(self, request, NameID, child_id, post_data):
self.get_link(NameID)
self.assert_child_pai_payoad_in_referential(post_data)
# use None to empty date passed as an empty string by date filter
for key in 'dateDeb', 'dateFin':
@ -1021,6 +1141,7 @@ class ToulouseMaelis(BaseResource, HTTPResource):
)
def update_child_medical_record(self, request, NameID, child_id, post_data):
self.get_link(NameID)
self.assert_child_medical_record_payload_in_referential(post_data)
self.replace_null_values(post_data)
payload = {

View File

@ -1037,7 +1037,17 @@ def test_is_child_exists(mocked_post, mocked_get, post_response, result, con, ap
@mock.patch('passerelle.utils.Request.post')
def test_create_family(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = CREATE_FAMILY
mocked_post.side_effect = [
READ_CATEGORIES,
READ_SITUATIONS,
READ_CIVILITIES,
READ_QUALITIES,
READ_CSP,
READ_ORGAN,
READ_DIETCODE,
READ_VACCIN,
CREATE_FAMILY,
]
url = get_endpoint('create-family')
params = {
'categorie': 'ACCEUI',
@ -1118,7 +1128,13 @@ def test_create_family_already_linked_error(con, app):
@mock.patch('passerelle.utils.Request.post')
def test_create_family_maelis_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = CREATE_FAMILY_ERR
mocked_post.side_effect = [
READ_CATEGORIES,
READ_SITUATIONS,
READ_CIVILITIES,
READ_QUALITIES,
CREATE_FAMILY_ERR,
]
url = get_endpoint('create-family')
params = {
'categorie': 'ACCEUI',
@ -1140,12 +1156,21 @@ def test_create_family_maelis_error(mocked_post, mocked_get, con, app):
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_family(mocked_post, mocked_get, con, app):
def test_create_family_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_FAMILY
url = get_endpoint('update-family')
mocked_post.side_effect = [
READ_CATEGORIES,
READ_SITUATIONS,
READ_CIVILITIES,
READ_QUALITIES,
READ_CSP,
READ_ORGAN,
READ_DIETCODE,
READ_VACCIN,
]
url = get_endpoint('create-family')
params = {
'categorie': 'BI',
'categorie': 'ACCEUI',
'situation': 'C',
'rl1/civility': 'M.',
'rl1/firstname': 'Jhon',
@ -1161,20 +1186,20 @@ def test_update_family(mocked_post, mocked_get, con, app):
'childList/0/lastname': 'Zimmerman',
'childList/0/firstname': 'Robert',
'childList/0/sexe': 'M',
'childList/0/birth/dateBirth': '1941-05-24',
'childList/0/birth/place': 'Duluth',
'childList/0/dateBirth': '1941-05-24',
'childList/0/dietcode': 'RSV',
'childList/0/paiInfoBean/code': 'PAIALI',
'childList/0/medicalRecord/vaccinList/0/code': 'DTC',
'childList/0/medicalRecord/vaccinList/0/code': 'plop',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local', params=params)
assert_sent_payload(mocked_post, 'Q_update_family.xml')
assert resp.json['err'] == 0
assert resp.json['err'] == 'wrong-key'
assert (
resp.json['err_desc']
== "childList/0/medicalRecord/vaccinList/0/code key value 'plop' do not belong to 'Vaccin' referential"
)
def test_update_family_already_not_linked_error(con, app):
def test_update_family_not_linked_error(con, app):
url = get_endpoint('update-family')
params = {
'categorie': 'BI',
@ -1198,7 +1223,11 @@ def test_update_family_already_not_linked_error(con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_family_maelis_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_FAMILY_ERR
mocked_post.side_effect = [
READ_CATEGORIES,
READ_SITUATIONS,
UPDATE_FAMILY_ERR,
]
url = get_endpoint('update-family')
params = {
'categorie': 'ACCEUI',
@ -1238,15 +1267,70 @@ def test_update_family_soap_error(mocked_post, mocked_get, con, app):
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 'Family-updateFamily-soap:Server'
assert resp.json['err'] == 'Family-readCategoryList-soap:Server'
assert 'Une erreur est survenue' in resp.json['err_desc']
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_family_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [
READ_CATEGORIES,
READ_SITUATIONS,
READ_CIVILITIES,
READ_QUALITIES,
READ_CSP,
READ_ORGAN,
READ_DIETCODE,
READ_PAI,
READ_VACCIN,
]
url = get_endpoint('update-family')
params = {
'categorie': 'BI',
'situation': 'C',
'rl1/civility': 'M.',
'rl1/firstname': 'Jhon',
'rl1/lastname': 'Doe',
'rl1/quality': 'AU',
'rl1/dateBirth': '1938-07-26',
'rl1/adresse/street1': 'Chateau',
'rl1/adresse/town': 'Paris',
'rl1/adresse/zipcode': '75014',
'rl1/adresse/numComp': 'B',
'rl1/profession/codeCSP': 'ART',
'rl1/CAFInfo/organ': 'A10007752822',
'childList/0/lastname': 'Zimmerman',
'childList/0/firstname': 'Robert',
'childList/0/sexe': 'M',
'childList/0/birth/dateBirth': '1941-05-24',
'childList/0/birth/place': 'Duluth',
'childList/0/dietcode': 'RSV',
'childList/0/paiInfoBean/code': 'PAIALI',
'childList/0/medicalRecord/vaccinList/0/code': 'plop',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 'wrong-key'
assert (
resp.json['err_desc']
== "childList/0/medicalRecord/vaccinList/0/code key value 'plop' do not belong to 'Vaccin' referential"
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_rl1(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = CREATE_FAMILY
mocked_post.side_effect = [
READ_CATEGORIES,
READ_SITUATIONS,
READ_CIVILITIES,
READ_QUALITIES,
CREATE_FAMILY,
]
url = get_endpoint('create-rl1')
params = {
'categorie': 'ACCEUI',
@ -1309,11 +1393,45 @@ def test_create_rl1_already_linked_error(con, app):
assert resp.json['err_desc'] == 'User already linked to family'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_rl1_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_CATEGORIES, READ_SITUATIONS, READ_CIVILITIES, READ_QUALITIES]
url = get_endpoint('create-rl1')
params = {
'categorie': 'ACCEUI',
'situation': 'C',
'rl1/civility': 'M.',
'rl1/firstname': 'Jhon',
'rl1/lastname': 'Doe',
'rl1/quality': 'AU',
'rl1/dateBirth': '1938-07-26',
'rl1/adresse/numComp': 'plop',
'rl1/adresse/street1': 'Chateau',
'rl1/adresse/town': 'Paris',
'rl1/adresse/zipcode': '75014',
}
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 'wrong-key'
assert (
resp.json['err_desc']
== "rl1/adresse/numComp key value 'plop' do not belong to 'Complement' referential"
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_rl1_maelis_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = CREATE_FAMILY_ERR
mocked_post.side_effect = [
READ_CATEGORIES,
READ_SITUATIONS,
READ_CIVILITIES,
READ_QUALITIES,
CREATE_FAMILY_ERR,
]
url = get_endpoint('create-rl1')
params = {
'categorie': 'ACCEUI',
@ -1337,7 +1455,7 @@ def test_create_rl1_maelis_error(mocked_post, mocked_get, con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_rl1(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_RL1_FAMILY, UPDATE_FAMILY]
mocked_post.side_effect = [READ_RL1_FAMILY, READ_CIVILITIES, READ_QUALITIES, UPDATE_FAMILY]
url = get_endpoint('update-rl1')
params = {
'civility': 'M.',
@ -1388,11 +1506,31 @@ def test_update_rl1_connection_error(mocked_post, mocked_get, con, app):
assert resp.json['err_desc'] == 'No address associated with hostname'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_rl1_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES, READ_QUALITIES]
url = get_endpoint('update-rl1')
params = {
'civility': 'M.',
'firstname': 'Jhonny',
'lastname': 'Doe',
'quality': 'plop',
'dateBirth': '1943-06-15',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 'wrong-key'
assert resp.json['err_desc'] == "quality key value 'plop' do not belong to 'Quality' required referential"
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_rl2(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_RL1_FAMILY, UPDATE_FAMILY]
mocked_post.side_effect = [READ_RL1_FAMILY, READ_CIVILITIES, READ_QUALITIES, UPDATE_FAMILY]
url = get_endpoint('create-rl2')
params = {
'civility': 'MME',
@ -1480,11 +1618,35 @@ def test_create_rl2_already_exists_error(mocked_post, mocked_get, con, app):
assert resp.json['err_desc'] == 'RL2 already defined on family'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_rl2_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_RL1_FAMILY, READ_CIVILITIES, READ_QUALITIES]
url = get_endpoint('create-rl2')
params = {
'civility': 'MME',
'firstname': 'JANE',
'lastname': 'DOE',
'quality': 'plop',
'dateBirth': '1940-06-22',
'adresse/num': '170',
'adresse/street1': "Chateau d'eau",
'adresse/town': 'Paris',
'adresse/zipcode': '75014',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 'wrong-key'
assert resp.json['err_desc'] == "quality key value 'plop' do not belong to 'Quality' required referential"
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_rl2(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, UPDATE_FAMILY]
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES, READ_QUALITIES, UPDATE_FAMILY]
url = get_endpoint('update-rl2')
params = {
'civility': 'MME',
@ -1555,6 +1717,26 @@ def test_update_rl2_not_exists_error(mocked_post, mocked_get, con, app):
assert resp.json['err_desc'] == 'No RL2 to update on family'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_rl2_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES, READ_QUALITIES]
url = get_endpoint('update-rl2')
params = {
'civility': 'MME',
'firstname': 'JANE',
'lastname': 'DOE',
'quality': 'plop',
'dateBirth': '1940-06-22',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 'wrong-key'
assert resp.json['err_desc'] == "quality key value 'plop' do not belong to 'Quality' required referential"
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_child(mocked_post, mocked_get, con, app):
@ -1727,7 +1909,7 @@ def test_update_child_not_exists_error(mocked_post, mocked_get, con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_coordinate(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_FAMILY
mocked_post.side_effect = [READ_CSP, READ_ORGAN, UPDATE_FAMILY]
url = get_endpoint('update-coordinate')
params = {
'adresse/num': '169',
@ -1773,11 +1955,34 @@ def test_update_coordinate_schema_error(con, app):
assert resp.json['err_desc'] == "'true more text' is not of type 'boolean'"
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_coordinate_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_FAMILY
url = get_endpoint('update-coordinate')
params = {
'adresse/num': '169',
'adresse/numComp': 'plop',
'adresse/street1': 'Château',
'adresse/street2': None,
'adresse/town': 'Paris',
'adresse/zipcode': '75014',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local&rl_id=613878', params=params)
assert resp.json['err'] == 'wrong-key'
assert (
resp.json['err_desc'] == "adresse/numComp key value 'plop' do not belong to 'Complement' referential"
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_person(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, UPDATE_FAMILY]
mocked_post.side_effect = [READ_FAMILY, READ_QUALITIES, UPDATE_FAMILY]
url = get_endpoint('create-person')
params = {
'civility': None,
@ -1797,11 +2002,7 @@ def test_create_person(mocked_post, mocked_get, con, app):
assert resp.json['err'] == 0
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_person_required_field_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, UPDATE_FAMILY]
def test_create_person_required_field_error(con, app):
url = get_endpoint('create-person')
params = {
'civility': None,
@ -1857,11 +2058,35 @@ def test_create_person_not_linked_error(con, app):
assert resp.json['err_desc'] == 'User not linked to family'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_person_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, READ_QUALITIES, UPDATE_FAMILY]
url = get_endpoint('create-person')
params = {
'civility': None,
'firstname': 'Mathias',
'lastname': 'Cassel',
'quality': 'O',
'sexe': 'plop',
'dateBirth': '1972-01-01',
'contact/phone': None,
'contact/mobile': '0623456789',
'contact/mail': None,
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local', params=params)
assert resp.json['err'] == 'wrong-key'
assert resp.json['err_desc'] == "sexe key value 'plop' do not belong to 'Sex' referential"
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_person(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, UPDATE_FAMILY]
mocked_post.side_effect = [READ_FAMILY, READ_QUALITIES, UPDATE_FAMILY]
url = get_endpoint('update-person')
params = {
'civility': None,
@ -1904,7 +2129,7 @@ def test_update_person_not_linked_error(con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_person_not_found(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY]
mocked_post.side_effect = [READ_FAMILY, READ_QUALITIES]
url = get_endpoint('update-person')
params = {
'civility': None,
@ -1961,7 +2186,7 @@ def test_delete_person_not_found(mocked_post, mocked_get, con, app):
@mock.patch('passerelle.utils.Request.post')
def test_create_child_person(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, UPDATE_CHILD_AUTO]
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES, READ_QUALITIES, UPDATE_CHILD_AUTO]
url = get_endpoint('create-child-person')
params = {
'personInfo/civility': 'MME',
@ -2019,6 +2244,30 @@ def test_create_child_person_not_linked_error(con, app):
assert resp.json['err_desc'] == 'User not linked to family'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_child_person_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES]
url = get_endpoint('create-child-person')
params = {
'personInfo/civility': 'MME',
'personInfo/firstname': 'Diana',
'personInfo/lastname': 'Ross',
'personInfo/sexe': 'plop',
'personInfo/dateBirth': '1944-03-26',
'personInfo/contact/phone': '0199999999',
'personInfo/contact/mobile': '0723456789',
'personInfo/contact/mail': 'dross@example.org',
'personQuality/code': 'TUTEUR',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local&child_id=613880', params=params)
assert resp.json['err'] == 'wrong-key'
assert resp.json['err_desc'] == "personInfo/sexe key value 'plop' do not belong to 'Sex' referential"
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_create_child_person_no_child_error(mocked_post, mocked_get, con, app):
@ -2047,7 +2296,7 @@ def test_create_child_person_no_child_error(mocked_post, mocked_get, con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_child_person(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, UPDATE_FAMILY]
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES, READ_QUALITIES, UPDATE_FAMILY]
url = get_endpoint('update-child-person')
params = {
'personInfo/civility': 'M.',
@ -2085,11 +2334,35 @@ def test_update_child_person_not_linked_error(con, app):
assert resp.json['err_desc'] == 'User not linked to family'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_child_person_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES, READ_QUALITIES, UPDATE_FAMILY]
url = get_endpoint('update-child-person')
params = {
'personInfo/civility': 'M.',
'personInfo/firstname': 'Angelo',
'personInfo/lastname': 'Bent',
'personInfo/sexe': 'plop',
'personInfo/dateBirth': '1985-06-22',
'personInfo/contact/phone': '0102030405',
'personInfo/contact/mobile': None,
'personInfo/contact/mail': None,
'personQuality/code': 'O',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local&child_id=613880&person_id=614719', params=params)
assert resp.json['err'] == 'wrong-key'
assert resp.json['err_desc'] == "personInfo/sexe key value 'plop' do not belong to 'Sex' referential"
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_child_person_no_child_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY]
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES, READ_QUALITIES, READ_QUALITIES]
url = get_endpoint('update-child-person')
params = {
'personInfo/civility': 'M.',
@ -2112,7 +2385,7 @@ def test_update_child_person_no_child_error(mocked_post, mocked_get, con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_child_person_not_found(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_FAMILY]
mocked_post.side_effect = [READ_FAMILY, READ_CIVILITIES, READ_QUALITIES, READ_QUALITIES]
url = get_endpoint('update-child-person')
params = {
'personInfo/civility': 'M.',
@ -2182,7 +2455,7 @@ def test_delete_child_person_no_person_error(mocked_post, mocked_get, con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_child_dietcode(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_DIETCODE
mocked_post.side_effect = [READ_DIETCODE, UPDATE_DIETCODE]
url = get_endpoint('update-child-dietcode')
Link.objects.create(resource=con, family_id='1312', name_id='local')
@ -2200,11 +2473,40 @@ def test_update_child_dietcode_not_linked_error(con, app):
assert resp.json['err_desc'] == 'User not linked to family'
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_child_dietcode_empty_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_DIETCODE, UPDATE_DIETCODE]
url = get_endpoint('update-child-dietcode')
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local&child_id=613878&dietcode=')
assert resp.json['err'] == 'field-required'
assert resp.json['err_desc'] == "dietcode parameter is required and could not be None"
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_child_dietcode_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_DIETCODE, UPDATE_DIETCODE]
url = get_endpoint('update-child-dietcode')
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local&child_id=613878&dietcode=plop')
assert resp.json['err'] == 'wrong-key'
assert (
resp.json['err_desc']
== "dietcode parameter key value 'plop' do not belong to 'DietCode' required referential"
)
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_child_pai(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_PAI
mocked_post.side_effect = [READ_PAI, UPDATE_PAI]
url = get_endpoint('update-child-pai')
params = {
'code': 'PAIALI',
@ -2215,7 +2517,6 @@ def test_update_child_pai(mocked_post, mocked_get, con, app):
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local&child_id=613878', params=params)
assert_sent_payload(mocked_post, 'Q_update_child_pai.xml')
assert resp.json['err'] == 0
assert resp.json['data'] == 'ok'
@ -2252,7 +2553,7 @@ def test_update_child_pai_not_linked_error(con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_child_pai_soap_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_PAI_500
mocked_post.side_effect = [READ_PAI, UPDATE_PAI_500]
url = get_endpoint('update-child-pai')
params = {
'code': 'PAIALI',
@ -2342,7 +2643,7 @@ def test_update_child_fsl_soap_error(mocked_post, mocked_get, con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_child_medical_record(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_MEDICAL
mocked_post.side_effect = [READ_VACCIN, UPDATE_MEDICAL]
url = get_endpoint('update-child-medical-record')
params = {
'familyDoctor/name': 'Dre',
@ -2375,7 +2676,7 @@ def test_update_child_medical_record_not_linked_error(con, app):
@mock.patch('passerelle.utils.Request.post')
def test_update_child_medical_record_soap_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.return_value = UPDATE_MEDICAL_500
mocked_post.side_effect = [UPDATE_MEDICAL_500]
url = get_endpoint('update-child-medical-record')
params = {
'vaccinList/0/vaccinationDate': '2022-02-31',
@ -2386,3 +2687,27 @@ def test_update_child_medical_record_soap_error(mocked_post, mocked_get, con, ap
assert resp.json['err'] == 'Family-updateChildMedicalRecord-soap:Client'
assert 'Unmarshalling Error' in resp.json['err_desc']
assert 'pas une valeur de calendrier grégorien' in resp.json['err_desc']
@mock.patch('passerelle.utils.Request.get')
@mock.patch('passerelle.utils.Request.post')
def test_update_child_medical_record_wrong_referential_key_error(mocked_post, mocked_get, con, app):
mocked_get.return_value = FAMILY_SERVICE_WSDL
mocked_post.side_effect = [READ_VACCIN]
url = get_endpoint('update-child-medical-record')
params = {
'familyDoctor/name': 'Dre',
'familyDoctor/phone': '0612341234',
'familyDoctor/address/street1': 'Alameda',
'familyDoctor/address/zipcode': '90220',
'familyDoctor/address/town': 'Compton',
'vaccinList/0/code': 'DTC',
'vaccinList/0/vaccinationDate': '2011-01-11',
'vaccinList/1/code': 'plop',
'vaccinList/1/vaccinationDate': '2022-02-22',
}
Link.objects.create(resource=con, family_id='1312', name_id='local')
resp = app.post_json(url + '?NameID=local&child_id=613878', params=params)
assert resp.json['err'] == 'wrong-key'
assert resp.json['err_desc'] == "vaccinList/1/code key value 'plop' do not belong to 'Vaccin' referential"