0002-toulouse_axel-handle-handicap-fields-38543.patch
functests/toulouse_axel/test_toulouse_axel.py | ||
---|---|---|
54 | 54 |
'maj:enfant_%s_sanitaire_medecin' % i, |
55 | 55 |
'maj:enfant_%s_sanitaire_vaccin' % i, |
56 | 56 |
'maj:enfant_%s_sanitaire_allergie' % i, |
57 |
'maj:enfant_%s_sanitaire_handicap' % i, |
|
57 | 58 |
'maj:enfant_%s_assurance' % i, |
58 | 59 |
'maj:enfant_%s_contact' % i, |
59 | 60 |
] |
60 | 61 |
for key in flags: |
61 | 62 |
payload[key] = True |
63 |
payload['maj:enfant_0_sanitaire_handicap'] = False |
|
62 | 64 | |
63 | 65 |
print("Update family info with the following payload:") |
64 | 66 |
pprint.pprint(payload) |
passerelle/contrib/toulouse_axel/models.py | ||
---|---|---|
286 | 286 |
'maj:enfant_%s_sanitaire_medecin' % i: 'ENFANT/%s/SANITAIRE/MEDECIN' % i, |
287 | 287 |
'maj:enfant_%s_sanitaire_vaccin' % i: 'ENFANT/%s/SANITAIRE/VACCIN' % i, |
288 | 288 |
'maj:enfant_%s_sanitaire_allergie' % i: 'ENFANT/%s/SANITAIRE/ALLERGIE' % i, |
289 |
'maj:enfant_%s_sanitaire_handicap' % i: 'ENFANT/%s/SANITAIRE/HANDICAP' % i, |
|
289 | 290 |
'maj:enfant_%s_assurance' % i: 'ENFANT/%s/ASSURANCE' % i, |
290 | 291 |
'maj:enfant_%s_contact' % i: 'ENFANT/%s/CONTACT' % i, |
291 | 292 |
}) |
... | ... | |
518 | 519 |
# empty all subelements |
519 | 520 |
for k in data[element_to_remove].keys(): |
520 | 521 |
data[element_to_remove][k] = None |
521 |
elif element_to_remove == 'CONTACT':
|
|
522 |
elif element_to_remove in ['CONTACT', 'HANDICAP']:
|
|
522 | 523 |
# get the correct child |
523 | 524 |
child_data = post_data['ENFANT'][elements[1]] |
524 | 525 |
child_id = child_data['IDPERSONNE'] |
525 |
# and reset the contacts
|
|
526 |
# get family info
|
|
526 | 527 |
if family_data is None: |
527 | 528 |
family_data = self.get_family_data(name_id) |
528 | 529 |
for child in family_data['ENFANT']: |
529 |
if child['IDPERSONNE'] == child_id: |
|
530 |
# find the correct child in family info |
|
531 |
if child['IDPERSONNE'] != child_id: |
|
532 |
continue |
|
533 |
if element_to_remove == 'CONTACT': |
|
534 |
# reset the contacts |
|
530 | 535 |
if child.get('CONTACT'): |
531 | 536 |
child_data['CONTACT'] = child['CONTACT'] |
532 | 537 |
# XXX set LIENPARENTE because if empty the contact is deleted |
... | ... | |
535 | 540 |
contact['LIENPARENTE'] = 'BABY' |
536 | 541 |
elif 'CONTACT' in child_data: |
537 | 542 |
child_data.pop('CONTACT') |
538 |
break |
|
543 |
else: |
|
544 |
# reset handicap related fields |
|
545 |
handicap_fields = [ |
|
546 |
'AUTREDIFFICULTE', |
|
547 |
'ECOLESPECIALISEE', |
|
548 |
'INDICATEURAUXILIAIREVS', |
|
549 |
'INDICATEURECOLE', |
|
550 |
'INDICATEURHANDICAP', |
|
551 |
'INDICATEURNOTIFMDPH', |
|
552 |
] |
|
553 |
for key in handicap_fields: |
|
554 |
child_data['SANITAIRE'][key] = child['SANITAIRE'][key] |
|
555 |
break |
|
539 | 556 |
elif element_to_remove in data: |
540 | 557 |
# remove block |
541 | 558 |
data.pop(element_to_remove) |
tests/data/toulouse_axel/flat_update_family_info.json | ||
---|---|---|
161 | 161 |
"maj:enfant_0_sanitaire_allergie": "OUI", |
162 | 162 |
"maj:enfant_0_sanitaire_medecin": "OUI", |
163 | 163 |
"maj:enfant_0_sanitaire_vaccin": "OUI", |
164 |
"maj:enfant_0_sanitaire_handicap": "OUI", |
|
164 | 165 |
"maj:enfant_1": "OUI", |
165 | 166 |
"maj:enfant_1_assurance": "OUI", |
166 | 167 |
"maj:enfant_1_contact": "OUI", |
... | ... | |
168 | 169 |
"maj:enfant_1_sanitaire_allergie": "OUI", |
169 | 170 |
"maj:enfant_1_sanitaire_medecin": "OUI", |
170 | 171 |
"maj:enfant_1_sanitaire_vaccin": "OUI", |
172 |
"maj:enfant_1_sanitaire_handicap": "OUI", |
|
171 | 173 |
"maj:enfant_2": "OUI", |
172 | 174 |
"maj:enfant_2_assurance": "OUI", |
173 | 175 |
"maj:enfant_2_contact": "OUI", |
... | ... | |
175 | 177 |
"maj:enfant_2_sanitaire_allergie": "OUI", |
176 | 178 |
"maj:enfant_2_sanitaire_medecin": "OUI", |
177 | 179 |
"maj:enfant_2_sanitaire_vaccin": "OUI", |
180 |
"maj:enfant_2_sanitaire_handicap": "OUI", |
|
178 | 181 |
"maj:enfant_3": "OUI", |
179 | 182 |
"maj:enfant_3_assurance": "OUI", |
180 | 183 |
"maj:enfant_3_contact": "OUI", |
... | ... | |
182 | 185 |
"maj:enfant_3_sanitaire_allergie": "OUI", |
183 | 186 |
"maj:enfant_3_sanitaire_medecin": "OUI", |
184 | 187 |
"maj:enfant_3_sanitaire_vaccin": "OUI", |
188 |
"maj:enfant_3_sanitaire_handicap": "OUI", |
|
185 | 189 |
"maj:enfant_4": "OUI", |
186 | 190 |
"maj:enfant_4_assurance": "OUI", |
187 | 191 |
"maj:enfant_4_contact": "OUI", |
... | ... | |
189 | 193 |
"maj:enfant_4_sanitaire_allergie": "OUI", |
190 | 194 |
"maj:enfant_4_sanitaire_medecin": "OUI", |
191 | 195 |
"maj:enfant_4_sanitaire_vaccin": "OUI", |
196 |
"maj:enfant_4_sanitaire_handicap": "OUI", |
|
192 | 197 |
"maj:enfant_5": "OUI", |
193 | 198 |
"maj:enfant_5_assurance": "OUI", |
194 | 199 |
"maj:enfant_5_contact": "OUI", |
... | ... | |
196 | 201 |
"maj:enfant_5_sanitaire_allergie": "OUI", |
197 | 202 |
"maj:enfant_5_sanitaire_medecin": "OUI", |
198 | 203 |
"maj:enfant_5_sanitaire_vaccin": "OUI", |
204 |
"maj:enfant_5_sanitaire_handicap": "OUI", |
|
199 | 205 |
"maj:revenus": "OUI", |
200 | 206 |
"maj:rl1": "OUI", |
201 | 207 |
"maj:rl1_adresse_employeur": "OUI", |
tests/data/toulouse_axel/update_family_info.json | ||
---|---|---|
219 | 219 |
"maj:enfant_0_sanitaire_allergie": "OUI", |
220 | 220 |
"maj:enfant_0_sanitaire_medecin": "OUI", |
221 | 221 |
"maj:enfant_0_sanitaire_vaccin": "OUI", |
222 |
"maj:enfant_0_sanitaire_handicap": "OUI", |
|
222 | 223 |
"maj:enfant_1": "OUI", |
223 | 224 |
"maj:enfant_1_assurance": "OUI", |
224 | 225 |
"maj:enfant_1_contact": "OUI", |
... | ... | |
226 | 227 |
"maj:enfant_1_sanitaire_allergie": "OUI", |
227 | 228 |
"maj:enfant_1_sanitaire_medecin": "OUI", |
228 | 229 |
"maj:enfant_1_sanitaire_vaccin": "OUI", |
230 |
"maj:enfant_1_sanitaire_handicap": "OUI", |
|
229 | 231 |
"maj:enfant_2": "OUI", |
230 | 232 |
"maj:enfant_2_assurance": "OUI", |
231 | 233 |
"maj:enfant_2_contact": "OUI", |
... | ... | |
233 | 235 |
"maj:enfant_2_sanitaire_allergie": "OUI", |
234 | 236 |
"maj:enfant_2_sanitaire_medecin": "OUI", |
235 | 237 |
"maj:enfant_2_sanitaire_vaccin": "OUI", |
238 |
"maj:enfant_2_sanitaire_handicap": "OUI", |
|
236 | 239 |
"maj:enfant_3": "OUI", |
237 | 240 |
"maj:enfant_3_assurance": "OUI", |
238 | 241 |
"maj:enfant_3_contact": "OUI", |
... | ... | |
240 | 243 |
"maj:enfant_3_sanitaire_allergie": "OUI", |
241 | 244 |
"maj:enfant_3_sanitaire_medecin": "OUI", |
242 | 245 |
"maj:enfant_3_sanitaire_vaccin": "OUI", |
246 |
"maj:enfant_3_sanitaire_handicap": "OUI", |
|
243 | 247 |
"maj:enfant_4": "OUI", |
244 | 248 |
"maj:enfant_4_assurance": "OUI", |
245 | 249 |
"maj:enfant_4_contact": "OUI", |
... | ... | |
247 | 251 |
"maj:enfant_4_sanitaire_allergie": "OUI", |
248 | 252 |
"maj:enfant_4_sanitaire_medecin": "OUI", |
249 | 253 |
"maj:enfant_4_sanitaire_vaccin": "OUI", |
254 |
"maj:enfant_4_sanitaire_handicap": "OUI", |
|
250 | 255 |
"maj:enfant_5": "OUI", |
251 | 256 |
"maj:enfant_5_assurance": "OUI", |
252 | 257 |
"maj:enfant_5_contact": "OUI", |
... | ... | |
254 | 259 |
"maj:enfant_5_sanitaire_allergie": "OUI", |
255 | 260 |
"maj:enfant_5_sanitaire_medecin": "OUI", |
256 | 261 |
"maj:enfant_5_sanitaire_vaccin": "OUI", |
262 |
"maj:enfant_5_sanitaire_handicap": "OUI", |
|
257 | 263 |
"maj:revenus": "OUI", |
258 | 264 |
"maj:rl1": "OUI", |
259 | 265 |
"maj:rl1_adresse_employeur": "OUI", |
tests/test_toulouse_axel.py | ||
---|---|---|
969 | 969 |
assert 'VACCIN' in partial_update_params['ENFANT'][1]['SANITAIRE'] |
970 | 970 | |
971 | 971 | |
972 |
def test_sanitize_update_family_data_enfant_n_sanitaire_handicap(app, resource, update_params): |
|
973 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42') |
|
974 | ||
975 |
# test maj:enfant_n_contact |
|
976 |
filepath = os.path.join(os.path.dirname(__file__), 'data/toulouse_axel/family_info.xml') |
|
977 |
with open(filepath) as xml: |
|
978 |
content = xml.read() |
|
979 |
partial_update_params = copy.deepcopy(update_params) |
|
980 |
partial_update_params['maj:enfant_0_sanitaire_handicap'] = False |
|
981 |
# reset fields |
|
982 |
handicap_fields = [ |
|
983 |
'AUTREDIFFICULTE', |
|
984 |
'ECOLESPECIALISEE', |
|
985 |
'INDICATEURAUXILIAIREVS', |
|
986 |
'INDICATEURECOLE', |
|
987 |
'INDICATEURHANDICAP', |
|
988 |
'INDICATEURNOTIFMDPH', |
|
989 |
] |
|
990 |
for key in handicap_fields: |
|
991 |
partial_update_params['ENFANT'][0]['SANITAIRE'][key] = None |
|
992 |
partial_update_params['maj:enfant_1'] = False |
|
993 |
with mock_getdata(content, 'RefFamilleDui'): |
|
994 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
995 |
original_values = resource.get_family_data(name_id='yyy')['ENFANT'][0]['SANITAIRE'] |
|
996 |
assert len(partial_update_params['ENFANT']) == 1 |
|
997 |
assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242" |
|
998 |
# fields were set with origin values found in Axel |
|
999 |
new_values = partial_update_params['ENFANT'][0]['SANITAIRE'] |
|
1000 |
for key in handicap_fields: |
|
1001 |
assert new_values[key] == original_values[key] |
|
1002 |
# combine with maj:enfant_n_sanitaire |
|
1003 |
partial_update_params = copy.deepcopy(update_params) |
|
1004 |
partial_update_params['maj:enfant_1_sanitaire'] = False |
|
1005 |
partial_update_params['maj:enfant_1_sanitaire_handicap'] = False |
|
1006 |
partial_update_params['maj:enfant_0'] = False |
|
1007 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
1008 |
assert len(partial_update_params['ENFANT']) == 1 |
|
1009 |
assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535" |
|
1010 |
assert 'SANITAIRE' not in partial_update_params['ENFANT'][0] |
|
1011 |
# combine with maj:enfant_n |
|
1012 |
partial_update_params = copy.deepcopy(update_params) |
|
1013 |
partial_update_params['maj:enfant_1'] = False |
|
1014 |
partial_update_params['maj:enfant_1_sanitaire_sanitaire'] = False |
|
1015 |
partial_update_params['maj:enfant_0'] = False |
|
1016 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
1017 |
assert 'ENFANT' not in partial_update_params |
|
1018 | ||
1019 |
# test maj:enfant_n_sanitaire_handicap not set |
|
1020 |
partial_update_params = copy.deepcopy(update_params) |
|
1021 |
partial_update_params['maj:enfant_0_sanitaire_handicap'] = None |
|
1022 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ref_famille_dui') as operation: |
|
1023 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
1024 |
assert operation.call_args_list == [] |
|
1025 | ||
1026 | ||
972 | 1027 |
def test_sanitize_update_family_data_axel_error(app, resource, update_params): |
973 | 1028 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42') |
1029 | ||
974 | 1030 |
partial_update_params = copy.deepcopy(update_params) |
975 | 1031 |
partial_update_params['maj:enfant_0_contact'] = False |
976 | 1032 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ref_famille_dui') as operation: |
... | ... | |
978 | 1034 |
with pytest.raises(APIError, match='Axel error: FooBar'): |
979 | 1035 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
980 | 1036 | |
1037 |
partial_update_params = copy.deepcopy(update_params) |
|
1038 |
partial_update_params['maj:enfant_0_sanitaire_handicap'] = False |
|
1039 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ref_famille_dui') as operation: |
|
1040 |
operation.side_effect = AxelError('FooBar') |
|
1041 |
with pytest.raises(APIError, match='Axel error: FooBar'): |
|
1042 |
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params) |
|
1043 | ||
981 | 1044 | |
982 | 1045 |
def test_update_family_info_endpoint_sanitize_axel_error(app, resource, update_params): |
983 | 1046 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42') |
984 |
- |