toulouse_maelis: add medical record webservice (#69045)
This commit is contained in:
parent
5b08c35515
commit
d4e7d064c5
|
@ -828,6 +828,28 @@ class ToulouseMaelis(BaseResource, HTTPResource):
|
|||
self.call('Family', 'createOrUpdateFSL', arg0=child_id, arg1=post_data)
|
||||
return {'data': 'ok'}
|
||||
|
||||
@endpoint(
|
||||
display_category='Famille',
|
||||
description="Créer ou mettre à jour les données médicales d'un enfant",
|
||||
name='update-child-medical-record',
|
||||
perm='can_access',
|
||||
parameters={
|
||||
'NameID': {'description': 'Publik NameID'},
|
||||
'child_id': {'description': "Numéro de l'enfant"},
|
||||
},
|
||||
post={'request_body': {'schema': {'application/json': schemas.MEDICALRECORD_SCHEMA}}},
|
||||
)
|
||||
def update_child_medical_record(self, request, NameID, child_id, post_data):
|
||||
self.get_link(NameID)
|
||||
self.replace_null_values(post_data)
|
||||
|
||||
payload = {
|
||||
'numPerson': child_id,
|
||||
'medicalRecord': post_data,
|
||||
}
|
||||
self.call('Family', 'updateChildMedicalRecord', updateChildMedicalRecordRequest=payload)
|
||||
return {'data': 'ok'}
|
||||
|
||||
|
||||
class Link(models.Model):
|
||||
resource = models.ForeignKey(ToulouseMaelis, on_delete=models.CASCADE)
|
||||
|
|
|
@ -374,15 +374,15 @@ DOCTORADDRESS_SCHEMA = {
|
|||
'properties': {
|
||||
'street1': {
|
||||
'description': 'Libellé de la voie',
|
||||
'type': 'string',
|
||||
'oneOf': [{'type': 'null'}, {'type': 'string'}],
|
||||
},
|
||||
'town': {
|
||||
'description': 'Ville',
|
||||
'type': 'string',
|
||||
'oneOf': [{'type': 'null'}, {'type': 'string'}],
|
||||
},
|
||||
'zipcode': {
|
||||
'description': 'Code postal',
|
||||
'type': 'string',
|
||||
'oneOf': [{'type': 'null'}, {'type': 'string'}],
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@ -449,6 +449,7 @@ MEDICALRECORD_SCHEMA = {
|
|||
},
|
||||
},
|
||||
],
|
||||
'unflatten': True,
|
||||
}
|
||||
|
||||
PAIINFO_SCHEMA = {
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soap-env:Header>
|
||||
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
|
||||
<wsse:UsernameToken>
|
||||
<wsse:Username>maelis-webservice</wsse:Username>
|
||||
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">maelis-password</wsse:Password>
|
||||
</wsse:UsernameToken>
|
||||
</wsse:Security>
|
||||
</soap-env:Header>
|
||||
<soap-env:Body>
|
||||
<ns0:updateChildMedicalRecord xmlns:ns0="family.ws.maelis.sigec.com">
|
||||
<updateChildMedicalRecordRequest>
|
||||
<numPerson>613878</numPerson>
|
||||
<medicalRecord>
|
||||
<familyDoctor>
|
||||
<name>Dre</name>
|
||||
<phone>0612341234</phone>
|
||||
<address>
|
||||
<street1>Alameda</street1>
|
||||
<zipcode>90220</zipcode>
|
||||
<town>Compton</town>
|
||||
</address>
|
||||
</familyDoctor>
|
||||
<vaccinList>
|
||||
<code>DTC</code>
|
||||
<vaccinationDate>2011-01-11</vaccinationDate>
|
||||
</vaccinList>
|
||||
<vaccinList>
|
||||
<code>ROR</code>
|
||||
<vaccinationDate>2022-02-22</vaccinationDate>
|
||||
</vaccinList>
|
||||
</medicalRecord>
|
||||
</updateChildMedicalRecordRequest>
|
||||
</ns0:updateChildMedicalRecord>
|
||||
</soap-env:Body>
|
||||
</soap-env:Envelope>
|
|
@ -0,0 +1,5 @@
|
|||
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soap:Body>
|
||||
<ns2:updateChildMedicalRecordResponse xmlns:ns2="family.ws.maelis.sigec.com"/>
|
||||
</soap:Body>
|
||||
</soap:Envelope>
|
|
@ -0,0 +1,8 @@
|
|||
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soap:Body>
|
||||
<soap:Fault>
|
||||
<faultcode>soap:Client</faultcode>
|
||||
<faultstring>Unmarshalling Error: "2012-02-31" ne représente pas une valeur de calendrier grégorien XML valide. </faultstring>
|
||||
</soap:Fault>
|
||||
</soap:Body>
|
||||
</soap:Envelope>
|
|
@ -72,6 +72,10 @@ UPDATE_PAI = FakedResponse(content=get_xml_file('R_update_child_pai.xml'), statu
|
|||
UPDATE_PAI_500 = FakedResponse(content=get_xml_file('R_update_child_pai_soap_error.xml'), status_code=500)
|
||||
UPDATE_FSL = FakedResponse(content=get_xml_file('R_update_child_fsl.xml'), status_code=200)
|
||||
UPDATE_FSL_500 = FakedResponse(content=get_xml_file('R_update_child_fsl_soap_error.xml'), status_code=500)
|
||||
UPDATE_MEDICAL = FakedResponse(content=get_xml_file('R_update_child_fsl.xml'), status_code=200)
|
||||
UPDATE_MEDICAL_500 = FakedResponse(
|
||||
content=get_xml_file('R_update_child_medical_record_soap_error.xml'), status_code=500
|
||||
)
|
||||
|
||||
|
||||
def assert_sent_payload(mocked_post, query_file):
|
||||
|
@ -1979,3 +1983,53 @@ def test_update_child_fsl_soap_error(mocked_post, mocked_get, con, app):
|
|||
assert 'Une erreur est survenue' in resp.json['err_desc']
|
||||
assert 'valeur trop grande' in resp.json['err_desc']
|
||||
assert 'maximum : 70' in resp.json['err_desc']
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
@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
|
||||
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': 'ROR',
|
||||
'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_sent_payload(mocked_post, 'Q_update_child_medical_record.xml')
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['data'] == 'ok'
|
||||
|
||||
|
||||
def test_update_child_medical_record_not_linked_error(con, app):
|
||||
url = get_endpoint('update-child-medical-record')
|
||||
|
||||
resp = app.post_json(url + '?NameID=local&child_id=613878', params={})
|
||||
assert resp.json['err'] == 'not-linked'
|
||||
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_medical_record_soap_error(mocked_post, mocked_get, con, app):
|
||||
mocked_get.return_value = FAMILY_SERVICE_WSDL
|
||||
mocked_post.return_value = UPDATE_MEDICAL_500
|
||||
url = get_endpoint('update-child-medical-record')
|
||||
params = {
|
||||
'vaccinList/0/vaccinationDate': '2022-02-31',
|
||||
}
|
||||
|
||||
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'] == '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']
|
||||
|
|
Loading…
Reference in New Issue