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) |
... | ... | |
55 | 58 |
enfant['SANITAIRE']['HANDICAP'] = {} |
56 | 59 |
for key in handicap_fields: |
57 | 60 |
enfant['SANITAIRE']['HANDICAP'][key] = enfant['SANITAIRE'].pop(key) |
61 |
# manage allergie data (not the same schema) |
|
62 |
if 'ALLERGIE' not in enfant['SANITAIRE']: |
|
63 |
continue |
|
64 |
new_allergie = { |
|
65 |
'ASTHME': False, |
|
66 |
'MEDICAMENTEUSES': False, |
|
67 |
'ALIMENTAIRES': False, |
|
68 |
'AUTRES': None, |
|
69 |
} |
|
70 |
for allergie in enfant['SANITAIRE']['ALLERGIE']: |
|
71 |
if allergie['TYPE'] == 'AUTRES': |
|
72 |
if allergie['ALLERGIQUE'] == 'OUI': |
|
73 |
new_allergie['AUTRES'] = allergie['NOMALLERGIE'] |
|
74 |
continue |
|
75 |
new_allergie[allergie['TYPE']] = allergie['ALLERGIQUE'] |
|
76 |
enfant['SANITAIRE']['ALLERGIE'] = new_allergie |
|
58 | 77 |
# add partial update flags |
59 | 78 |
flags = [ |
60 | 79 |
'maj:adresse', |
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) |
... | ... | |
296 | 299 |
form_maj_famille_dui.request_schema['properties']['PORTAIL']['properties']['DUI']) |
297 | 300 | |
298 | 301 |
for flag in sorted(UPDATE_FAMILY_FLAGS.keys()): |
299 |
flag_type = { |
|
300 |
'oneOf': [ |
|
301 |
{'type': 'boolean'}, |
|
302 |
{ |
|
303 |
'type': 'string', |
|
304 |
'pattern': '[Oo][Uu][Ii]|[Nn][Oo][Nn]|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee]|1|0', |
|
305 |
} |
|
306 |
] |
|
307 |
} |
|
302 |
flag_type = copy.deepcopy(boolean_type) |
|
308 | 303 |
if flag not in UPDATE_FAMILY_REQUIRED_FLAGS: |
309 | 304 |
flag_type['oneOf'].append({'type': 'null'}) |
310 | 305 |
flag_type['oneOf'].append({'type': 'string', 'enum': ['']}) |
... | ... | |
338 | 333 |
sanitaire_properties['HANDICAP']['properties'][key] = field |
339 | 334 |
sanitaire_required.remove(key) |
340 | 335 | |
336 |
sanitaire_properties.pop('ALLERGIE') |
|
337 |
sanitaire_properties['ALLERGIE'] = { |
|
338 |
'type': 'object', |
|
339 |
'properties': {}, |
|
340 |
'required': ['ASTHME', 'MEDICAMENTEUSES', 'ALIMENTAIRES', 'AUTRES'], |
|
341 |
} |
|
342 |
for key in ['ASTHME', 'MEDICAMENTEUSES', 'ALIMENTAIRES']: |
|
343 |
sanitaire_properties['ALLERGIE']['properties'][key] = copy.deepcopy(boolean_type) |
|
344 |
sanitaire_properties['ALLERGIE']['properties']['AUTRES'] = { |
|
345 |
'oneOf': [ |
|
346 |
{'type': 'null'}, |
|
347 |
{ |
|
348 |
'type': 'string', |
|
349 |
'minLength': 0, |
|
350 |
'maxLength': 50, |
|
351 |
} |
|
352 |
] |
|
353 |
} |
|
354 | ||
341 | 355 |
UPDATE_FAMILY_SCHEMA['unflatten'] = True |
342 | 356 | |
343 | 357 |
@endpoint( |
... | ... | |
577 | 591 |
continue |
578 | 592 |
child['SANITAIRE'].update(child['SANITAIRE'].pop('HANDICAP')) |
579 | 593 | |
594 |
# transform ALLERGIE block |
|
595 |
for child in post_data['ENFANT'].values(): |
|
596 |
if 'SANITAIRE' not in child: |
|
597 |
continue |
|
598 |
if 'ALLERGIE' not in child['SANITAIRE']: |
|
599 |
continue |
|
600 |
new_allergie = [] |
|
601 |
for key in ['ASTHME', 'MEDICAMENTEUSES', 'ALIMENTAIRES']: |
|
602 |
new_allergie.append({ |
|
603 |
'TYPE': key, |
|
604 |
'ALLERGIQUE': child['SANITAIRE']['ALLERGIE'][key], |
|
605 |
'NOMALLERGIE': None, |
|
606 |
}) |
|
607 |
if child['SANITAIRE']['ALLERGIE']['AUTRES']: |
|
608 |
new_allergie.append({ |
|
609 |
'TYPE': 'AUTRES', |
|
610 |
'ALLERGIQUE': 'OUI', |
|
611 |
'NOMALLERGIE': child['SANITAIRE']['ALLERGIE']['AUTRES'], |
|
612 |
}) |
|
613 |
child['SANITAIRE']['ALLERGIE'] = new_allergie |
|
614 | ||
580 | 615 |
# transform ENFANT dict to a list back |
581 | 616 |
post_data['ENFANT'] = post_data['ENFANT'].values() |
582 | 617 |
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/DATEFINVALIDITE": "2020-12-31", |
49 | 44 |
"ENFANT/0/SANITAIRE/HANDICAP/AUTREDIFFICULTE": "", |
50 | 45 |
"ENFANT/0/SANITAIRE/HANDICAP/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/DATEFINVALIDITE": "2020-12-31", |
85 | 75 |
"ENFANT/1/SANITAIRE/HANDICAP/AUTREDIFFICULTE": "", |
86 | 76 |
"ENFANT/1/SANITAIRE/HANDICAP/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 |
"DATEFINVALIDITE": "2020-12-31", |
72 | 61 |
"HANDICAP": { |
73 | 62 |
"AUTREDIFFICULTE": null, |
... | ... | |
107 | 96 |
"AUTORISATIONURGENCEMEDICALE": "OUI", |
108 | 97 |
"IDPERSONNE": "3535", |
109 | 98 |
"SANITAIRE": { |
110 |
"ALLERGIE": [ |
|
111 |
{ |
|
112 |
"ALLERGIQUE": "OUI", |
|
113 |
"NOMALLERGIE": null, |
|
114 |
"TYPE": "ASTHME" |
|
115 |
}, |
|
116 |
{ |
|
117 |
"ALLERGIQUE": "OUI", |
|
118 |
"NOMALLERGIE": null, |
|
119 |
"TYPE": "MEDICAMENTEUSES" |
|
120 |
}, |
|
121 |
{ |
|
122 |
"ALLERGIQUE": "OUI", |
|
123 |
"NOMALLERGIE": null, |
|
124 |
"TYPE": "ALIMENTAIRES" |
|
125 |
} |
|
126 |
], |
|
99 |
"ALLERGIE": { |
|
100 |
"ASTHME": "OUI", |
|
101 |
"MEDICAMENTEUSES": "OUI", |
|
102 |
"ALIMENTAIRES": "OUI", |
|
103 |
"AUTRES": null |
|
104 |
}, |
|
127 | 105 |
"DATEFINVALIDITE": "2020-12-31", |
128 | 106 |
"HANDICAP": { |
129 | 107 |
"AUTREDIFFICULTE": null, |
tests/test_toulouse_axel.py | ||
---|---|---|
850 | 850 |
# test maj:enfant_n_sanitaire_allergie |
851 | 851 |
partial_update_params = copy.deepcopy(update_params) |
852 | 852 |
partial_update_params['maj:enfant_1_sanitaire_allergie'] = False |
853 |
for i, allergie in enumerate(partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']): |
|
854 |
for key in allergie.keys(): |
|
855 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'][i][key] = None # reset fields |
|
853 |
for key in partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'].keys(): |
|
854 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'][key] = None # reset fields |
|
856 | 855 |
partial_update_params['maj:enfant_0'] = False |
857 | 856 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
858 | 857 |
assert len(partial_update_params['ENFANT']) == 1 |
... | ... | |
884 | 883 |
assert 'ALLERGIE' not in partial_update_params['ENFANT'][0]['SANITAIRE'] |
885 | 884 |
assert 'ALLERGIE' not in partial_update_params['ENFANT'][1]['SANITAIRE'] |
886 | 885 | |
886 |
# check values |
|
887 |
partial_update_params = copy.deepcopy(update_params) |
|
888 |
partial_update_params['maj:enfant_1'] = False |
|
889 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ASTHME'] = 'NON' |
|
890 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['MEDICAMENTEUSES'] = 'NON' |
|
891 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ALIMENTAIRES'] = 'NON' |
|
892 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['AUTRES'] = '' |
|
893 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
894 |
assert partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'] == [ |
|
895 |
{'TYPE': 'ASTHME', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None}, |
|
896 |
{'TYPE': 'MEDICAMENTEUSES', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None}, |
|
897 |
{'TYPE': 'ALIMENTAIRES', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None}, |
|
898 |
] |
|
899 | ||
900 |
partial_update_params = copy.deepcopy(update_params) |
|
901 |
partial_update_params['maj:enfant_1'] = False |
|
902 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ASTHME'] = 'OUI' |
|
903 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['MEDICAMENTEUSES'] = 'OUI' |
|
904 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ALIMENTAIRES'] = 'OUI' |
|
905 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['AUTRES'] = 'accariens' |
|
906 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
907 |
assert partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'] == [ |
|
908 |
{'TYPE': 'ASTHME', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None}, |
|
909 |
{'TYPE': 'MEDICAMENTEUSES', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None}, |
|
910 |
{'TYPE': 'ALIMENTAIRES', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None}, |
|
911 |
{'TYPE': 'AUTRES', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': 'accariens'}, |
|
912 |
] |
|
913 | ||
887 | 914 | |
888 | 915 |
def test_sanitize_update_family_data_enfant_n_sanitaire_medecin(app, resource, update_params): |
889 | 916 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42') |
890 |
- |