0001-toulouse-axel-check-children-activities-44724.patch
passerelle/contrib/toulouse_axel/models.py | ||
---|---|---|
861 | 861 |
# exclude child in private schools |
862 | 862 |
if child['LIBELLEECOLE'].startswith('PRIVEE'): |
863 | 863 |
continue |
864 |
# exclude also child with more than one registration per activity_type |
|
864 |
# exclude also child with more than one registration per activity_type or missing activity
|
|
865 | 865 |
activity_types = [a['TYPEACTIVITE'] for a in child.get('ACTIVITE', [])] |
866 |
if len(activity_types) > len(set(activity_types)): |
|
866 |
activity_types.sort() |
|
867 |
if activity_types != ['MAT', 'MIDI', 'SOIR'] and activity_types != ['GARD', 'MAT', 'MIDI', 'SOIR']: |
|
868 |
# GARD is optional |
|
867 | 869 |
continue |
868 | 870 |
# ok, store child |
869 | 871 |
data[child['IDPERSONNE']] = child |
tests/data/toulouse_axel/child_activities.xml | ||
---|---|---|
114 | 114 |
<DATEFIN>31/07/2020</DATEFIN> |
115 | 115 |
</ACTIVITE> |
116 | 116 |
</ENFANT> |
117 |
<ENFANT> |
|
118 |
<NOM>foo</NOM> |
|
119 |
<PRENOM>foo</PRENOM> |
|
120 |
<DATENAISSANCE>01/01/2019</DATENAISSANCE> |
|
121 |
<IDPERSONNE>1234</IDPERSONNE> |
|
122 |
<REGIME>SV</REGIME> |
|
123 |
<LIBELLEECOLE>MATERNELLE 42</LIBELLEECOLE> |
|
124 |
<ACTIVITE> |
|
125 |
<TYPEACTIVITE>MAT</TYPEACTIVITE> |
|
126 |
<IDACTIVITE>A19P1M1</IDACTIVITE> |
|
127 |
<LIBELLEACTIVITE>Temps du matin</LIBELLEACTIVITE> |
|
128 |
<DATEENTREE>01/08/2019</DATEENTREE> |
|
129 |
<DATESORTIE>31/07/2020</DATESORTIE> |
|
130 |
<TARIF>0.42</TARIF> |
|
131 |
<ISPAI>NON</ISPAI> |
|
132 |
<COUTREVIENT>99999</COUTREVIENT> |
|
133 |
<DATEDEBUT>01/08/2019</DATEDEBUT> |
|
134 |
<DATEFIN>31/07/2020</DATEFIN> |
|
135 |
</ACTIVITE> |
|
136 |
<ACTIVITE> |
|
137 |
<TYPEACTIVITE>MAT</TYPEACTIVITE> |
|
138 |
<IDACTIVITE>A19P1M1bis</IDACTIVITE> |
|
139 |
<LIBELLEACTIVITE>Temps du matin autre école</LIBELLEACTIVITE> |
|
140 |
<DATEENTREE>01/08/2019</DATEENTREE> |
|
141 |
<DATESORTIE>31/07/2020</DATESORTIE> |
|
142 |
<TARIF>0.43</TARIF> |
|
143 |
<ISPAI>NON</ISPAI> |
|
144 |
<COUTREVIENT>99999</COUTREVIENT> |
|
145 |
<DATEDEBUT>01/08/2019</DATEDEBUT> |
|
146 |
<DATEFIN>31/07/2020</DATEFIN> |
|
147 |
</ACTIVITE> |
|
148 |
<ACTIVITE> |
|
149 |
<TYPEACTIVITE>SOIR</TYPEACTIVITE> |
|
150 |
<IDACTIVITE>A19P1M3</IDACTIVITE> |
|
151 |
<LIBELLEACTIVITE>Temps du soir</LIBELLEACTIVITE> |
|
152 |
<DATEENTREE>01/08/2019</DATEENTREE> |
|
153 |
<DATESORTIE>31/07/2020</DATESORTIE> |
|
154 |
<TARIF>0.44</TARIF> |
|
155 |
<ISPAI>NON</ISPAI> |
|
156 |
<COUTREVIENT>99999</COUTREVIENT> |
|
157 |
<DATEDEBUT>01/08/2019</DATEDEBUT> |
|
158 |
<DATEFIN>31/07/2020</DATEFIN> |
|
159 |
</ACTIVITE> |
|
160 |
<ACTIVITE> |
|
161 |
<TYPEACTIVITE>GARD</TYPEACTIVITE> |
|
162 |
<IDACTIVITE>A19P1M4</IDACTIVITE> |
|
163 |
<LIBELLEACTIVITE>Temps mercredi après midi</LIBELLEACTIVITE> |
|
164 |
<DATEENTREE>01/08/2019</DATEENTREE> |
|
165 |
<DATESORTIE>31/07/2020</DATESORTIE> |
|
166 |
<TARIF>0.45</TARIF> |
|
167 |
<ISPAI>NON</ISPAI> |
|
168 |
<COUTREVIENT>99999</COUTREVIENT> |
|
169 |
<DATEDEBUT>01/08/2019</DATEDEBUT> |
|
170 |
<DATEFIN>31/07/2020</DATEFIN> |
|
171 |
</ACTIVITE> |
|
172 |
</ENFANT> |
|
173 | 117 |
</DUI> |
174 | 118 |
</PORTAIL> |
tests/test_toulouse_axel.py | ||
---|---|---|
2424 | 2424 |
assert resp.json['err'] == 0 |
2425 | 2425 | |
2426 | 2426 | |
2427 |
@pytest.mark.parametrize('activities, expected', [ |
|
2428 |
# all activities except GARD - optional |
|
2429 |
(['MAT', 'MIDI', 'SOIR'], True), |
|
2430 |
# all activities |
|
2431 |
(['MAT', 'MIDI', 'SOIR', 'GARD'], True), |
|
2432 |
# duplicated activities |
|
2433 |
(['MAT', 'MAT', 'MIDI', 'SOIR', 'GARD'], False), |
|
2434 |
(['MAT', 'MIDI', 'MIDI', 'SOIR', 'GARD'], False), |
|
2435 |
(['MAT', 'MIDI', 'SOIR', 'SOIR', 'GARD'], False), |
|
2436 |
(['MAT', 'MIDI', 'SOIR', 'GARD', 'GARD'], False), |
|
2437 |
# missing activity |
|
2438 |
(['MIDI', 'SOIR'], False), |
|
2439 |
(['MAT', 'SOIR'], False), |
|
2440 |
(['MAT', 'MIDI'], False), |
|
2441 |
]) |
|
2442 |
def test_clae_children_activities_info_check(app, resource, activities, expected): |
|
2443 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42') |
|
2444 |
result = [] |
|
2445 |
for activity in activities: |
|
2446 |
result.append({'IDACTIVITE': 'foo%s' % activity, 'TYPEACTIVITE': activity}) |
|
2447 |
result = {'DATA': {'PORTAIL': {'DUI': {'ENFANT': [ |
|
2448 |
{'IDPERSONNE': '42', 'NOM': '', 'PRENOM': '', 'REGIME': '', 'LIBELLEECOLE': '', 'ACTIVITE': result} |
|
2449 |
]}}}} |
|
2450 |
with mock.patch('passerelle.contrib.toulouse_axel.schemas.enfants_activites') as operation: |
|
2451 |
operation.return_value = schemas.OperationResult(json_response=result, xml_request='', xml_response='') |
|
2452 |
resp = app.get('/toulouse-axel/test/clae_children_activities_info?NameID=yyy&booking_date=2020-01-20') |
|
2453 |
assert resp.json['err'] == 0 |
|
2454 |
assert len(resp.json['data']) == expected and 1 or 0 |
|
2455 | ||
2456 | ||
2427 | 2457 |
def test_clae_booking_activities_info_endpoint_axel_error(app, resource): |
2428 | 2458 |
Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42') |
2429 | 2459 |
with mock.patch('passerelle.contrib.toulouse_axel.schemas.enfants_activites') as operation: |
2430 |
- |