24 |
24 |
import os
|
25 |
25 |
import xml.etree.ElementTree as ET
|
26 |
26 |
|
|
27 |
import freezegun
|
27 |
28 |
import pytest
|
28 |
29 |
import xmlschema
|
29 |
30 |
|
... | ... | |
44 |
45 |
ref_verif_dui,
|
45 |
46 |
reservation_periode,
|
46 |
47 |
)
|
|
48 |
from passerelle.contrib.toulouse_axel.utils import get_reference_year_from_date
|
47 |
49 |
from passerelle.utils.jsonresponse import APIError
|
48 |
50 |
import utils
|
49 |
51 |
|
... | ... | |
662 |
664 |
'TELFIXE',
|
663 |
665 |
])
|
664 |
666 |
|
|
667 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.are_children_registered') as registered:
|
|
668 |
registered.side_effect = [{'4242': True}, {}]
|
|
669 |
with mock_getdata(content, 'RefFamilleDui'):
|
|
670 |
resp = app.get('/toulouse-axel/test/family_info?NameID=yyy')
|
|
671 |
assert resp.json['err'] == 0
|
|
672 |
assert resp.json['data']['ENFANT'][0]['clae_cantine_current'] is True
|
|
673 |
assert resp.json['data']['ENFANT'][0]['clae_cantine_next'] is None
|
|
674 |
assert resp.json['data']['ENFANT'][1]['clae_cantine_current'] is None
|
|
675 |
assert resp.json['data']['ENFANT'][1]['clae_cantine_next'] is None
|
|
676 |
|
|
677 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.are_children_registered') as registered:
|
|
678 |
registered.side_effect = [{}, {'4242': False, '3535': True}]
|
|
679 |
with mock_getdata(content, 'RefFamilleDui'):
|
|
680 |
resp = app.get('/toulouse-axel/test/family_info?NameID=yyy')
|
|
681 |
assert resp.json['err'] == 0
|
|
682 |
assert resp.json['data']['ENFANT'][0]['clae_cantine_current'] is None
|
|
683 |
assert resp.json['data']['ENFANT'][0]['clae_cantine_next'] is False
|
|
684 |
assert resp.json['data']['ENFANT'][1]['clae_cantine_current'] is None
|
|
685 |
assert resp.json['data']['ENFANT'][1]['clae_cantine_next'] is True
|
|
686 |
|
665 |
687 |
|
666 |
688 |
def test_child_info_endpoint_axel_error(app, resource):
|
667 |
689 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
|
... | ... | |
709 |
731 |
'RATTACHEAUTREDUI',
|
710 |
732 |
'SANITAIRE',
|
711 |
733 |
'SEXE',
|
|
734 |
'clae_cantine_current',
|
|
735 |
'clae_cantine_next',
|
712 |
736 |
])
|
713 |
737 |
|
|
738 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.are_children_registered') as registered:
|
|
739 |
registered.side_effect = [{'4242': True}, {}]
|
|
740 |
with mock_getdata(content, 'RefFamilleDui'):
|
|
741 |
resp = app.get('/toulouse-axel/test/child_info?NameID=yyy&idpersonne=4242')
|
|
742 |
assert resp.json['err'] == 0
|
|
743 |
assert resp.json['data']['clae_cantine_current'] is True
|
|
744 |
assert resp.json['data']['clae_cantine_next'] is None
|
|
745 |
|
|
746 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.are_children_registered') as registered:
|
|
747 |
registered.side_effect = [{}, {'4242': False}]
|
|
748 |
with mock_getdata(content, 'RefFamilleDui'):
|
|
749 |
resp = app.get('/toulouse-axel/test/child_info?NameID=yyy&idpersonne=4242')
|
|
750 |
assert resp.json['err'] == 0
|
|
751 |
assert resp.json['data']['clae_cantine_current'] is None
|
|
752 |
assert resp.json['data']['clae_cantine_next'] is False
|
|
753 |
|
714 |
754 |
|
715 |
755 |
def test_update_family_info_endpoint_axel_error(app, resource, update_params, family_data):
|
716 |
756 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
|
... | ... | |
786 |
826 |
assert key not in full_update_params['RL2']
|
787 |
827 |
|
788 |
828 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
789 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=full_update_params)
|
|
829 |
resource.sanitize_update_family_data(dui='XXX', post_data=full_update_params)
|
790 |
830 |
for key in ['IDPERSONNE', 'NOM', 'PRENOM', 'NOMJEUNEFILLE', 'DATENAISSANCE', 'CIVILITE']:
|
791 |
831 |
assert full_update_params['RL1'][key] == family_data['RL1'][key]
|
792 |
832 |
assert full_update_params['RL2'][key] == family_data['RL2'][key]
|
... | ... | |
801 |
841 |
assert 'NBENFANTSACHARGE' not in update_params['REVENUS']
|
802 |
842 |
|
803 |
843 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
804 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=full_update_params)
|
|
844 |
resource.sanitize_update_family_data(dui='XXX', post_data=full_update_params)
|
805 |
845 |
assert full_update_params['REVENUS']['NBENFANTSACHARGE'] == family_data['REVENUS']['NBENFANTSACHARGE']
|
806 |
846 |
|
807 |
847 |
# if revenus are not set in Axel
|
808 |
848 |
full_update_params = copy.deepcopy(update_params)
|
809 |
849 |
family_data.pop('REVENUS')
|
810 |
850 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
811 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=full_update_params)
|
|
851 |
resource.sanitize_update_family_data(dui='XXX', post_data=full_update_params)
|
812 |
852 |
assert full_update_params['REVENUS']['NBENFANTSACHARGE'] is None
|
813 |
853 |
|
814 |
854 |
|
... | ... | |
1089 |
1129 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ALIMENTAIRES'] = 'NON'
|
1090 |
1130 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['AUTRES'] = ''
|
1091 |
1131 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
1092 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
|
|
1132 |
resource.sanitize_update_family_data(dui='XXX', post_data=partial_update_params)
|
1093 |
1133 |
assert partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'] == [
|
1094 |
1134 |
{'TYPE': 'ASTHME', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None},
|
1095 |
1135 |
{'TYPE': 'MEDICAMENTEUSES', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None},
|
... | ... | |
1103 |
1143 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ALIMENTAIRES'] = 'OUI'
|
1104 |
1144 |
partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['AUTRES'] = 'accariens'
|
1105 |
1145 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
1106 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
|
|
1146 |
resource.sanitize_update_family_data(dui='XXX', post_data=partial_update_params)
|
1107 |
1147 |
assert partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'] == [
|
1108 |
1148 |
{'TYPE': 'ASTHME', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None},
|
1109 |
1149 |
{'TYPE': 'MEDICAMENTEUSES', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None},
|
... | ... | |
1213 |
1253 |
resource.pre_sanitize_update_family_data(post_data=partial_update_params)
|
1214 |
1254 |
assert '_to_reset' in partial_update_params['ENFANT'][0]['SANITAIRE']['HANDICAP']
|
1215 |
1255 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
1216 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
|
|
1256 |
resource.sanitize_update_family_data(dui='XXX', post_data=partial_update_params)
|
1217 |
1257 |
assert len(partial_update_params['ENFANT']) == 1
|
1218 |
1258 |
assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242"
|
1219 |
1259 |
# fields were set with origin values found in Axel
|
... | ... | |
1228 |
1268 |
partial_update_params['maj:enfant_0'] = False
|
1229 |
1269 |
resource.pre_sanitize_update_family_data(post_data=partial_update_params)
|
1230 |
1270 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
1231 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
|
|
1271 |
resource.sanitize_update_family_data(dui='XXX', post_data=partial_update_params)
|
1232 |
1272 |
assert len(partial_update_params['ENFANT']) == 1
|
1233 |
1273 |
assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
|
1234 |
1274 |
assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
|
... | ... | |
1239 |
1279 |
partial_update_params['maj:enfant_0'] = False
|
1240 |
1280 |
resource.pre_sanitize_update_family_data(post_data=partial_update_params)
|
1241 |
1281 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
1242 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
|
|
1282 |
resource.sanitize_update_family_data(dui='XXX', post_data=partial_update_params)
|
1243 |
1283 |
assert 'ENFANT' not in partial_update_params
|
1244 |
1284 |
|
1245 |
1285 |
# test maj:enfant_n_sanitaire_handicap not set
|
... | ... | |
1252 |
1292 |
partial_update_params['ENFANT'][0]['SANITAIRE']['HANDICAP'][key] = None
|
1253 |
1293 |
resource.pre_sanitize_update_family_data(post_data=partial_update_params)
|
1254 |
1294 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
|
1255 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
|
|
1295 |
resource.sanitize_update_family_data(dui='XXX', post_data=partial_update_params)
|
1256 |
1296 |
new_values = partial_update_params['ENFANT'][0]['SANITAIRE']
|
1257 |
1297 |
for key in handicap_fields:
|
1258 |
1298 |
assert new_values[key] == family_data['ENFANT'][0]['SANITAIRE'][key]
|
... | ... | |
1277 |
1317 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ref_famille_dui') as operation:
|
1278 |
1318 |
operation.side_effect = AxelError('FooBar')
|
1279 |
1319 |
with pytest.raises(APIError, match='Axel error: FooBar'):
|
1280 |
|
resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
|
|
1320 |
resource.sanitize_update_family_data(dui='XXX', post_data=partial_update_params)
|
1281 |
1321 |
|
1282 |
1322 |
|
1283 |
1323 |
def test_update_family_info_endpoint_sanitize_axel_error(app, resource, update_params):
|
... | ... | |
1945 |
1985 |
assert resp.json['data']['ACTIVITE'][2]['booking'] == {}
|
1946 |
1986 |
assert resp.json['data']['ACTIVITE'][3]['IDACTIVITE'] == 'A19P1M4'
|
1947 |
1987 |
assert resp.json['data']['ACTIVITE'][3]['booking'] == {}
|
|
1988 |
|
|
1989 |
|
|
1990 |
def test_are_children_registered_axel_error(resource):
|
|
1991 |
with mock.patch('passerelle.contrib.toulouse_axel.models.enfants_activites') as operation:
|
|
1992 |
operation.side_effect = AxelError('FooBar')
|
|
1993 |
assert resource.are_children_registered(dui='XXX', reference_year=42) == {}
|
|
1994 |
|
|
1995 |
|
|
1996 |
@pytest.mark.parametrize('date_value, year, expected', [
|
|
1997 |
# neither current year nor next year
|
|
1998 |
('2020-01-01', 2018, {}),
|
|
1999 |
('2020-01-01', 2021, {}),
|
|
2000 |
# current year
|
|
2001 |
('2019-08-01', 2019, {'3535': True}),
|
|
2002 |
('2020-07-31', 2019, {'3535': True}),
|
|
2003 |
# too early for next_year
|
|
2004 |
('2019-08-01', 2020, {}),
|
|
2005 |
('2020-01-01', 2020, {}),
|
|
2006 |
('2020-05-31', 2020, {}),
|
|
2007 |
# good period for next year
|
|
2008 |
('2020-06-01', 2020, {'3535': True}),
|
|
2009 |
('2020-07-31', 2020, {'3535': True}),
|
|
2010 |
])
|
|
2011 |
def test_are_children_registered_reference_year(resource, date_value, year, expected):
|
|
2012 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_children_activities') as get_children_activities:
|
|
2013 |
get_children_activities.return_value = {'3535': {'ACTIVITE': [{}]}}
|
|
2014 |
with freezegun.freeze_time(date_value):
|
|
2015 |
assert resource.are_children_registered(dui='XXX', reference_year=year) == expected
|
|
2016 |
|
|
2017 |
|
|
2018 |
@pytest.mark.parametrize('activities, expected', [
|
|
2019 |
({}, {}),
|
|
2020 |
({'3535': {'ACTIVITE': []}}, {'3535': False}),
|
|
2021 |
({'3535': {'ACTIVITE': [{}]}}, {'3535': True}),
|
|
2022 |
({'3535': {'ACTIVITE': [{}]}, '4242': {}}, {'3535': True, '4242': False}),
|
|
2023 |
])
|
|
2024 |
def test_are_children_registered(resource, activities, expected):
|
|
2025 |
today = datetime.date.today()
|
|
2026 |
with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_children_activities') as get_children_activities:
|
|
2027 |
get_children_activities.return_value = activities
|
|
2028 |
assert resource.are_children_registered(dui='XXX', reference_year=get_reference_year_from_date(today)) == expected
|
1948 |
|
-
|