0003-toulouse_axel-handle-allergie-fields-38543.patch
functests/toulouse_axel/test_toulouse_axel.py | ||
---|---|---|
29 | 29 |
pprint.pprint(data) |
30 | 30 |
print('\n') |
31 | 31 | |
32 |
# take family info and transform them into updatable data |
|
32 | 33 |
payload = data['data'] |
33 |
for key in ['SITUATIONFAMILIALE', 'NBENFANTACTIF', 'NBRLACTIF', 'IDDUI', 'CODEMISEAJOUR']: |
|
34 |
payload.pop(key) |
|
34 |
# complete required fields |
|
35 | 35 |
payload['N0TELEDOSSIER'] = '42' |
36 | 36 |
payload['DROITALIMAGE'] = 'NON' |
37 |
payload['REVENUS']['CHOIXREVENU'] = '' |
|
38 |
# remove non editable fields |
|
39 |
for key in ['SITUATIONFAMILIALE', 'NBENFANTACTIF', 'NBRLACTIF', 'IDDUI', 'CODEMISEAJOUR']: |
|
40 |
payload.pop(key) |
|
37 | 41 |
for key in ['MONTANTTOTAL', 'DATEVALIDITE', 'SFI', 'IREVENUS', 'RNF']: |
38 | 42 |
payload['REVENUS'].pop(key, None) |
39 |
payload['REVENUS']['CHOIXREVENU'] = '' |
|
40 | 43 |
for enfant in payload['ENFANT']: |
41 | 44 |
for key in ['NOM', 'DATENAISSANCE', 'SEXE', 'PRENOMPERE', 'PRENOMMERE', 'NOMPERE', 'NOMMERE', 'RATTACHEAUTREDUI', 'PRENOM']: |
42 | 45 |
enfant.pop(key) |
43 | 46 |
enfant['AUTORISATIONURGENCEMEDICALE'] = 'OUI' |
47 |
# manage allergie data (not the same schema) |
|
48 |
if 'SANITAIRE' not in enfant: |
|
49 |
continue |
|
50 |
if 'ALLERGIE' not in enfant['SANITAIRE']: |
|
51 |
continue |
|
52 |
new_allergie = { |
|
53 |
'ASTHME': False, |
|
54 |
'MEDICAMENTEUSES': False, |
|
55 |
'ALIMENTAIRES': False, |
|
56 |
'AUTRES': None, |
|
57 |
} |
|
58 |
for allergie in enfant['SANITAIRE']['ALLERGIE']: |
|
59 |
if allergie['TYPE'] == 'AUTRES': |
|
60 |
if allergie['ALLERGIQUE'] == 'OUI': |
|
61 |
new_allergie['AUTRES'] = allergie['NOMALLERGIE'] |
|
62 |
continue |
|
63 |
new_allergie[allergie['TYPE']] = allergie['ALLERGIQUE'] |
|
64 |
enfant['SANITAIRE']['ALLERGIE'] = new_allergie |
|
65 |
# add partial update flags |
|
44 | 66 |
flags = [ |
45 | 67 |
'maj:adresse', |
46 | 68 |
'maj:rl1', 'maj:rl1_adresse_employeur', |
passerelle/contrib/toulouse_axel/models.py | ||
---|---|---|
41 | 41 |
BASE_XSD_PATH = os.path.join(os.path.dirname(__file__), 'xsd') |
42 | 42 | |
43 | 43 | |
44 |
boolean_type = { |
|
45 |
'oneOf': [ |
|
46 |
{'type': 'boolean'}, |
|
47 |
{ |
|
48 |
'type': 'string', |
|
49 |
'pattern': '[Oo][Uu][Ii]|[Nn][Oo][Nn]|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0', |
|
50 |
} |
|
51 |
] |
|
52 |
} |
|
53 | ||
54 | ||
44 | 55 |
def indent(tree, space=" ", level=0): |
45 | 56 |
# backport from Lib/xml/etree/ElementTree.py python 3.9 |
46 | 57 |
if isinstance(tree, ET.ElementTree): |
... | ... | |
123 | 134 | |
124 | 135 |
@classmethod |
125 | 136 |
def schema_bool(cls): |
126 |
return { |
|
127 |
'oneOf': [ |
|
128 |
{'type': 'boolean'}, |
|
129 |
{ |
|
130 |
'type': 'string', |
|
131 |
'pattern': '[Oo][Uu][Ii]|[Nn][Oo][Nn]|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0', |
|
132 |
} |
|
133 |
] |
|
134 |
} |
|
137 |
return copy.deepcopy(boolean_type) |
|
135 | 138 | |
136 | 139 |
def encode_bool(self, obj): |
137 | 140 |
return encode_bool(obj) |
... | ... | |
300 | 303 |
UPDATE_FAMILY_SCHEMA['required'].remove('DATEDEMANDE') |
301 | 304 |
UPDATE_FAMILY_SCHEMA['required'].remove('QUIACTUALISEDUI') |
302 | 305 |
for flag in sorted(UPDATE_FAMILY_FLAGS.keys()): |
303 |
flag_type = { |
|
304 |
'oneOf': [ |
|
305 |
{'type': 'boolean'}, |
|
306 |
{ |
|
307 |
'type': 'string', |
|
308 |
'pattern': '[Oo][Uu][Ii]|[Nn][Oo][Nn]|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0', |
|
309 |
} |
|
310 |
] |
|
311 |
} |
|
306 |
flag_type = copy.deepcopy(boolean_type) |
|
312 | 307 |
if flag not in UPDATE_FAMILY_REQUIRED_FLAGS: |
313 | 308 |
flag_type['oneOf'].append({'type': 'null'}) |
314 | 309 |
UPDATE_FAMILY_SCHEMA['properties'][flag] = flag_type |
315 | 310 |
UPDATE_FAMILY_SCHEMA['required'].append(flag) |
311 |
sanitaire_properties = UPDATE_FAMILY_SCHEMA['properties']['ENFANT']['items']['properties']['SANITAIRE']['properties'] |
|
312 |
sanitaire_properties.pop('ALLERGIE') |
|
313 |
sanitaire_properties['ALLERGIE'] = { |
|
314 |
'type': 'object', |
|
315 |
'properties': {}, |
|
316 |
'required': ['ASTHME', 'MEDICAMENTEUSES', 'ALIMENTAIRES', 'AUTRES'], |
|
317 |
} |
|
318 |
for key in ['ASTHME', 'MEDICAMENTEUSES', 'ALIMENTAIRES']: |
|
319 |
sanitaire_properties['ALLERGIE']['properties'][key] = copy.deepcopy(boolean_type) |
|
320 |
sanitaire_properties['ALLERGIE']['properties']['AUTRES'] = { |
|
321 |
'oneOf': [ |
|
322 |
{'type': 'null'}, |
|
323 |
{ |
|
324 |
'type': 'string', |
|
325 |
'minLength': 0, |
|
326 |
'maxLength': 50, |
|
327 |
} |
|
328 |
] |
|
329 |
} |
|
316 | 330 |
UPDATE_FAMILY_SCHEMA['unflatten'] = True |
317 | 331 | |
318 | 332 |
@endpoint( |
... | ... | |
557 | 571 |
# remove block |
558 | 572 |
data.pop(element_to_remove) |
559 | 573 | |
574 |
# transform ALLERGIE block |
|
575 |
for child in post_data['ENFANT'].values(): |
|
576 |
if 'SANITAIRE' not in child: |
|
577 |
continue |
|
578 |
if 'ALLERGIE' not in child['SANITAIRE']: |
|
579 |
continue |
|
580 |
new_allergie = [] |
|
581 |
for key in ['ASTHME', 'MEDICAMENTEUSES', 'ALIMENTAIRES']: |
|
582 |
new_allergie.append({ |
|
583 |
'TYPE': key, |
|
584 |
'ALLERGIQUE': child['SANITAIRE']['ALLERGIE'][key], |
|
585 |
'NOMALLERGIE': None, |
|
586 |
}) |
|
587 |
if child['SANITAIRE']['ALLERGIE']['AUTRES']: |
|
588 |
new_allergie.append({ |
|
589 |
'TYPE': 'AUTRES', |
|
590 |
'ALLERGIQUE': 'OUI', |
|
591 |
'NOMALLERGIE': child['SANITAIRE']['ALLERGIE']['AUTRES'], |
|
592 |
}) |
|
593 |
child['SANITAIRE']['ALLERGIE'] = new_allergie |
|
594 | ||
560 | 595 |
# transform ENFANT dict to a list back |
561 | 596 |
post_data['ENFANT'] = post_data['ENFANT'].values() |
562 | 597 |
tests/data/toulouse_axel/flat_update_family_info.json | ||
---|---|---|
36 | 36 |
"ENFANT/0/CONTACT/2/TELFIXE": "0505050505", |
37 | 37 |
"ENFANT/0/CONTACT/2/TELPORTABLE": "0606060606", |
38 | 38 |
"ENFANT/0/IDPERSONNE": "4242", |
39 |
"ENFANT/0/SANITAIRE/ALLERGIE/0/ALLERGIQUE": "OUI", |
|
40 |
"ENFANT/0/SANITAIRE/ALLERGIE/0/NOMALLERGIE": "", |
|
41 |
"ENFANT/0/SANITAIRE/ALLERGIE/0/TYPE": "ASTHME", |
|
42 |
"ENFANT/0/SANITAIRE/ALLERGIE/1/ALLERGIQUE": "OUI", |
|
43 |
"ENFANT/0/SANITAIRE/ALLERGIE/1/NOMALLERGIE": "", |
|
44 |
"ENFANT/0/SANITAIRE/ALLERGIE/1/TYPE": "MEDICAMENTEUSES", |
|
45 |
"ENFANT/0/SANITAIRE/ALLERGIE/2/ALLERGIQUE": "OUI", |
|
46 |
"ENFANT/0/SANITAIRE/ALLERGIE/2/NOMALLERGIE": "", |
|
47 |
"ENFANT/0/SANITAIRE/ALLERGIE/2/TYPE": "ALIMENTAIRES", |
|
39 |
"ENFANT/0/SANITAIRE/ALLERGIE/ASTHME": "OUI", |
|
40 |
"ENFANT/0/SANITAIRE/ALLERGIE/MEDICAMENTEUSES": "OUI", |
|
41 |
"ENFANT/0/SANITAIRE/ALLERGIE/ALIMENTAIRES": "OUI", |
|
42 |
"ENFANT/0/SANITAIRE/ALLERGIE/AUTRES": "", |
|
48 | 43 |
"ENFANT/0/SANITAIRE/AUTREDIFFICULTE": "", |
49 | 44 |
"ENFANT/0/SANITAIRE/DATEFINVALIDITE": "2020-12-31", |
50 | 45 |
"ENFANT/0/SANITAIRE/ECOLESPECIALISEE": "", |
... | ... | |
72 | 67 |
"ENFANT/1/ASSURANCE/NUMERO": "1234", |
73 | 68 |
"ENFANT/1/AUTORISATIONURGENCEMEDICALE": "OUI", |
74 | 69 |
"ENFANT/1/IDPERSONNE": "3535", |
75 |
"ENFANT/1/SANITAIRE/ALLERGIE/0/ALLERGIQUE": "OUI", |
|
76 |
"ENFANT/1/SANITAIRE/ALLERGIE/0/NOMALLERGIE": "", |
|
77 |
"ENFANT/1/SANITAIRE/ALLERGIE/0/TYPE": "ASTHME", |
|
78 |
"ENFANT/1/SANITAIRE/ALLERGIE/1/ALLERGIQUE": "OUI", |
|
79 |
"ENFANT/1/SANITAIRE/ALLERGIE/1/NOMALLERGIE": "", |
|
80 |
"ENFANT/1/SANITAIRE/ALLERGIE/1/TYPE": "MEDICAMENTEUSES", |
|
81 |
"ENFANT/1/SANITAIRE/ALLERGIE/2/ALLERGIQUE": "OUI", |
|
82 |
"ENFANT/1/SANITAIRE/ALLERGIE/2/NOMALLERGIE": "", |
|
83 |
"ENFANT/1/SANITAIRE/ALLERGIE/2/TYPE": "ALIMENTAIRES", |
|
70 |
"ENFANT/1/SANITAIRE/ALLERGIE/ASTHME": "OUI", |
|
71 |
"ENFANT/1/SANITAIRE/ALLERGIE/MEDICAMENTEUSES": "OUI", |
|
72 |
"ENFANT/1/SANITAIRE/ALLERGIE/ALIMENTAIRES": "OUI", |
|
73 |
"ENFANT/1/SANITAIRE/ALLERGIE/AUTRES": "", |
|
84 | 74 |
"ENFANT/1/SANITAIRE/AUTREDIFFICULTE": "", |
85 | 75 |
"ENFANT/1/SANITAIRE/DATEFINVALIDITE": "2020-12-31", |
86 | 76 |
"ENFANT/1/SANITAIRE/ECOLESPECIALISEE": "", |
tests/data/toulouse_axel/update_family_info.json | ||
---|---|---|
51 | 51 |
], |
52 | 52 |
"IDPERSONNE": "4242", |
53 | 53 |
"SANITAIRE": { |
54 |
"ALLERGIE": [ |
|
55 |
{ |
|
56 |
"ALLERGIQUE": "OUI", |
|
57 |
"NOMALLERGIE": null, |
|
58 |
"TYPE": "ASTHME" |
|
59 |
}, |
|
60 |
{ |
|
61 |
"ALLERGIQUE": "OUI", |
|
62 |
"NOMALLERGIE": null, |
|
63 |
"TYPE": "MEDICAMENTEUSES" |
|
64 |
}, |
|
65 |
{ |
|
66 |
"ALLERGIQUE": "OUI", |
|
67 |
"NOMALLERGIE": null, |
|
68 |
"TYPE": "ALIMENTAIRES" |
|
69 |
} |
|
70 |
], |
|
54 |
"ALLERGIE": { |
|
55 |
"ASTHME": "OUI", |
|
56 |
"MEDICAMENTEUSES": "OUI", |
|
57 |
"ALIMENTAIRES": "OUI", |
|
58 |
"AUTRES": null |
|
59 |
}, |
|
71 | 60 |
"AUTREDIFFICULTE": null, |
72 | 61 |
"DATEFINVALIDITE": "2020-12-31", |
73 | 62 |
"ECOLESPECIALISEE": null, |
... | ... | |
105 | 94 |
"AUTORISATIONURGENCEMEDICALE": "OUI", |
106 | 95 |
"IDPERSONNE": "3535", |
107 | 96 |
"SANITAIRE": { |
108 |
"ALLERGIE": [ |
|
109 |
{ |
|
110 |
"ALLERGIQUE": "OUI", |
|
111 |
"NOMALLERGIE": null, |
|
112 |
"TYPE": "ASTHME" |
|
113 |
}, |
|
114 |
{ |
|
115 |
"ALLERGIQUE": "OUI", |
|
116 |
"NOMALLERGIE": null, |
|
117 |
"TYPE": "MEDICAMENTEUSES" |
|
118 |
}, |
|
119 |
{ |
|
120 |
"ALLERGIQUE": "OUI", |
|
121 |
"NOMALLERGIE": null, |
|
122 |
"TYPE": "ALIMENTAIRES" |
|
123 |
} |
|
124 |
], |
|
97 |
"ALLERGIE": { |
|
98 |
"ASTHME": "OUI", |
|
99 |
"MEDICAMENTEUSES": "OUI", |
|
100 |
"ALIMENTAIRES": "OUI", |
|
101 |
"AUTRES": null |
|
102 |
}, |
|
125 | 103 |
"AUTREDIFFICULTE": null, |
126 | 104 |
"DATEFINVALIDITE": "2020-12-31", |
127 | 105 |
"ECOLESPECIALISEE": null, |
tests/test_toulouse_axel.py | ||
---|---|---|
857 | 857 |
# test maj:enfant_n_sanitaire_allergie |
858 | 858 |
partial_update_params = copy.deepcopy(update_params) |
859 | 859 |
partial_update_params['maj:enfant_1_sanitaire_allergie'] = False |
860 |
for i, allergie in enumerate(partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']): |
|
861 |
for key in allergie.keys(): |
|
862 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'][i][key] = None # reset fields |
|
860 |
for key in partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'].keys(): |
|
861 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'][key] = None # reset fields |
|
863 | 862 |
partial_update_params['maj:enfant_0'] = False |
864 | 863 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
865 | 864 |
assert len(partial_update_params['ENFANT']) == 1 |
... | ... | |
890 | 889 |
assert 'ALLERGIE' in partial_update_params['ENFANT'][0]['SANITAIRE'] |
891 | 890 |
assert 'ALLERGIE' in partial_update_params['ENFANT'][1]['SANITAIRE'] |
892 | 891 | |
892 |
# check values |
|
893 |
partial_update_params = copy.deepcopy(update_params) |
|
894 |
partial_update_params['maj:enfant_1'] = False |
|
895 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ASTHME'] = 'NON' |
|
896 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['MEDICAMENTEUSES'] = 'NON' |
|
897 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ALIMENTAIRES'] = 'NON' |
|
898 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['AUTRES'] = '' |
|
899 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
900 |
assert partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'] == [ |
|
901 |
{'TYPE': 'ASTHME', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None}, |
|
902 |
{'TYPE': 'MEDICAMENTEUSES', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None}, |
|
903 |
{'TYPE': 'ALIMENTAIRES', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None}, |
|
904 |
] |
|
905 | ||
906 |
partial_update_params = copy.deepcopy(update_params) |
|
907 |
partial_update_params['maj:enfant_1'] = False |
|
908 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ASTHME'] = 'OUI' |
|
909 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['MEDICAMENTEUSES'] = 'OUI' |
|
910 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ALIMENTAIRES'] = 'OUI' |
|
911 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['AUTRES'] = 'accariens' |
|
912 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
913 |
assert partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'] == [ |
|
914 |
{'TYPE': 'ASTHME', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None}, |
|
915 |
{'TYPE': 'MEDICAMENTEUSES', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None}, |
|
916 |
{'TYPE': 'ALIMENTAIRES', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None}, |
|
917 |
{'TYPE': 'AUTRES', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': 'accariens'}, |
|
918 |
] |
|
919 | ||
893 | 920 | |
894 | 921 |
def test_sanitize_update_family_data_enfant_n_sanitaire_medecin(app, resource, update_params): |
895 | 922 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42') |
896 |
- |