147 |
147 |
}
|
148 |
148 |
|
149 |
149 |
|
|
150 |
@pytest.fixture
|
|
151 |
def week_booking_params():
|
|
152 |
return {
|
|
153 |
'child_id': '50632',
|
|
154 |
'activity_id': 'ELEM',
|
|
155 |
'booking_list': [],
|
|
156 |
'start_date': '2020-09-01',
|
|
157 |
'end_date': '2021-08-31',
|
|
158 |
}
|
|
159 |
|
|
160 |
|
150 |
161 |
@pytest.fixture
|
151 |
162 |
def upload_attachments_params():
|
152 |
163 |
return {
|
... | ... | |
2020 |
2031 |
assert resp.json['err'] == 'agenda-code-error-%s' % code
|
2021 |
2032 |
|
2022 |
2033 |
|
|
2034 |
@freezegun.freeze_time('2020-08-01')
|
|
2035 |
def test_set_activity_agenda_typical_week_endpoint_axel_error(
|
|
2036 |
app, resource, family_data, activities, week_booking_params
|
|
2037 |
):
|
|
2038 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
|
2039 |
week_booking_params['booking_list'] = ['monday']
|
|
2040 |
with mock.patch('passerelle.contrib.caluire_axel.schemas.get_famille_individus') as operation:
|
|
2041 |
operation.side_effect = AxelError('FooBar')
|
|
2042 |
resp = app.post_json(
|
|
2043 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy', params=week_booking_params
|
|
2044 |
)
|
|
2045 |
assert resp.json['err_desc'] == "Axel error: FooBar"
|
|
2046 |
assert resp.json['err'] == 'error'
|
|
2047 |
|
|
2048 |
filepath = os.path.join(os.path.dirname(__file__), 'data/caluire_axel/family_info.xml')
|
|
2049 |
with open(filepath) as xml:
|
|
2050 |
content = xml.read()
|
|
2051 |
with mock_data(content, 'GetFamilleIndividus'):
|
|
2052 |
with mock.patch('passerelle.contrib.caluire_axel.schemas.get_list_activites') as operation:
|
|
2053 |
operation.side_effect = AxelError('FooBar')
|
|
2054 |
resp = app.post_json(
|
|
2055 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy', params=week_booking_params
|
|
2056 |
)
|
|
2057 |
assert resp.json['err_desc'] == "Axel error: FooBar"
|
|
2058 |
assert resp.json['err'] == 'error'
|
|
2059 |
|
|
2060 |
filepath = os.path.join(os.path.dirname(__file__), 'data/caluire_axel/activities_info.xml')
|
|
2061 |
with open(filepath) as xml:
|
|
2062 |
content = xml.read()
|
|
2063 |
with mock_data(content, 'GetListActivites'):
|
|
2064 |
with mock.patch(
|
|
2065 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_family_data',
|
|
2066 |
return_value=family_data,
|
|
2067 |
):
|
|
2068 |
with mock.patch('passerelle.contrib.caluire_axel.schemas.get_agenda') as operation:
|
|
2069 |
operation.side_effect = AxelError('FooBar')
|
|
2070 |
resp = app.post_json(
|
|
2071 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2072 |
params=week_booking_params,
|
|
2073 |
)
|
|
2074 |
assert resp.json['err_desc'] == "Axel error: FooBar"
|
|
2075 |
assert resp.json['err'] == 'error'
|
|
2076 |
|
|
2077 |
content = '''<PORTAIL>
|
|
2078 |
<GETAGENDA>
|
|
2079 |
<CODE>1</CODE>
|
|
2080 |
<JOUR>
|
|
2081 |
<JOURDATE>07/09/2020</JOURDATE>
|
|
2082 |
<MATIN>.</MATIN>
|
|
2083 |
<MIDI></MIDI>
|
|
2084 |
<APRESMIDI></APRESMIDI>
|
|
2085 |
<FERME>N</FERME>
|
|
2086 |
</JOUR>
|
|
2087 |
</GETAGENDA>
|
|
2088 |
</PORTAIL>'''
|
|
2089 |
with mock_data(content, 'GetAgenda'):
|
|
2090 |
with mock.patch(
|
|
2091 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_family_data',
|
|
2092 |
return_value=family_data,
|
|
2093 |
):
|
|
2094 |
with mock.patch(
|
|
2095 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_child_activities',
|
|
2096 |
return_value=activities,
|
|
2097 |
):
|
|
2098 |
with mock.patch('passerelle.contrib.caluire_axel.schemas.set_agenda') as operation:
|
|
2099 |
operation.side_effect = AxelError('FooBar')
|
|
2100 |
resp = app.post_json(
|
|
2101 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2102 |
params=week_booking_params,
|
|
2103 |
)
|
|
2104 |
assert resp.json['err_desc'] == "Axel error: FooBar"
|
|
2105 |
assert resp.json['err'] == 'error'
|
|
2106 |
|
|
2107 |
|
|
2108 |
def test_set_activity_agenda_typical_week_endpoint_no_result(app, resource, week_booking_params):
|
|
2109 |
week_booking_params['child_id'] = 'zzz'
|
|
2110 |
resp = app.post_json(
|
|
2111 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy', params=week_booking_params
|
|
2112 |
)
|
|
2113 |
assert resp.json['err_desc'] == "Person not found"
|
|
2114 |
assert resp.json['err'] == 'not-found'
|
|
2115 |
|
|
2116 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
|
2117 |
filepath = os.path.join(os.path.dirname(__file__), 'data/caluire_axel/family_info.xml')
|
|
2118 |
with open(filepath) as xml:
|
|
2119 |
content = xml.read()
|
|
2120 |
with mock_data(content, 'GetFamilleIndividus'):
|
|
2121 |
resp = app.post_json(
|
|
2122 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy', params=week_booking_params
|
|
2123 |
)
|
|
2124 |
assert resp.json['err_desc'] == "Child not found"
|
|
2125 |
assert resp.json['err'] == 'not-found'
|
|
2126 |
|
|
2127 |
|
|
2128 |
def test_set_activity_agenda_typical_week_endpoint_date_error(app, resource, week_booking_params):
|
|
2129 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
|
2130 |
filepath = os.path.join(os.path.dirname(__file__), 'data/caluire_axel/family_info.xml')
|
|
2131 |
with open(filepath) as xml:
|
|
2132 |
content = xml.read()
|
|
2133 |
with mock_data(content, 'GetFamilleIndividus'):
|
|
2134 |
week_booking_params['start_date'] = '2021-09-01'
|
|
2135 |
week_booking_params['end_date'] = '2021-08-31'
|
|
2136 |
resp = app.post_json(
|
|
2137 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2138 |
params=week_booking_params,
|
|
2139 |
status=400,
|
|
2140 |
)
|
|
2141 |
assert resp.json['err_desc'] == "start_date should be before end_date"
|
|
2142 |
assert resp.json['err'] == 'bad-request'
|
|
2143 |
|
|
2144 |
week_booking_params['end_date'] = '2022-09-01'
|
|
2145 |
resp = app.post_json(
|
|
2146 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2147 |
params=week_booking_params,
|
|
2148 |
status=400,
|
|
2149 |
)
|
|
2150 |
assert (
|
|
2151 |
resp.json['err_desc'] == "start_date and end_date are in different reference year (2021 != 2022)"
|
|
2152 |
)
|
|
2153 |
assert resp.json['err'] == 'bad-request'
|
|
2154 |
|
|
2155 |
|
|
2156 |
def test_set_activity_agenda_typical_week_endpoint(
|
|
2157 |
app, resource, family_data, activities, week_booking_params
|
|
2158 |
):
|
|
2159 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
|
2160 |
with mock.patch(
|
|
2161 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_family_data',
|
|
2162 |
return_value=family_data,
|
|
2163 |
):
|
|
2164 |
with mock.patch(
|
|
2165 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_child_activities',
|
|
2166 |
return_value=activities,
|
|
2167 |
):
|
|
2168 |
with mock.patch(
|
|
2169 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_bookings',
|
|
2170 |
return_value=[],
|
|
2171 |
):
|
|
2172 |
resp = app.post_json(
|
|
2173 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2174 |
params=week_booking_params,
|
|
2175 |
)
|
|
2176 |
assert resp.json['err'] == 0
|
|
2177 |
assert resp.json['updated'] is True
|
|
2178 |
assert resp.json['count'] == 0
|
|
2179 |
|
|
2180 |
|
|
2181 |
@pytest.mark.parametrize('prefill', [True, False])
|
|
2182 |
@freezegun.freeze_time('2020-08-01')
|
|
2183 |
def test_set_activity_agenda_typical_week_endpoint_prefill_periscolaire(
|
|
2184 |
app, resource, family_data, week_booking_params, prefill
|
|
2185 |
):
|
|
2186 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
|
2187 |
for activity_id in ['ACCMAT', 'GARDERIES', 'ETUDES', 'CANTINE', 'FOOBAR']:
|
|
2188 |
activity = {
|
|
2189 |
'ENTREE': '2020-09-02',
|
|
2190 |
'SORTIE': '2021-08-31',
|
|
2191 |
'IDENTACTIVITE': activity_id,
|
|
2192 |
'LIBELLEACTIVITE': 'FOOBAR',
|
|
2193 |
}
|
|
2194 |
week_booking_params['booking_list'] = ['monday']
|
|
2195 |
week_booking_params['activity_id'] = activity_id
|
|
2196 |
with mock.patch(
|
|
2197 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_family_data',
|
|
2198 |
return_value=family_data,
|
|
2199 |
):
|
|
2200 |
with mock.patch(
|
|
2201 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_child_activities',
|
|
2202 |
return_value={'ACTIVITE': [activity]},
|
|
2203 |
):
|
|
2204 |
bookings = [
|
|
2205 |
{
|
|
2206 |
'id': '50632:%s:2020-09-07' % activity_id,
|
|
2207 |
'disabled': False,
|
|
2208 |
'prefill': prefill,
|
|
2209 |
},
|
|
2210 |
{
|
|
2211 |
'id': '50632:%s:2020-09-08' % activity_id,
|
|
2212 |
'disabled': False,
|
|
2213 |
'prefill': prefill,
|
|
2214 |
},
|
|
2215 |
{
|
|
2216 |
'id': '50632:%s:2020-09-10' % activity_id,
|
|
2217 |
'disabled': False,
|
|
2218 |
'prefill': prefill,
|
|
2219 |
},
|
|
2220 |
{
|
|
2221 |
'id': '50632:%s:2020-09-11' % activity_id,
|
|
2222 |
'disabled': False,
|
|
2223 |
'prefill': prefill,
|
|
2224 |
},
|
|
2225 |
]
|
|
2226 |
with mock.patch(
|
|
2227 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_bookings',
|
|
2228 |
return_value=bookings,
|
|
2229 |
):
|
|
2230 |
with mock.patch('passerelle.contrib.caluire_axel.schemas.set_agenda') as operation:
|
|
2231 |
operation.return_value = OperationResult(
|
|
2232 |
json_response={'DATA': {'PORTAIL': {'SETAGENDA': {'CODE': 0}}}},
|
|
2233 |
xml_request='',
|
|
2234 |
xml_response='',
|
|
2235 |
)
|
|
2236 |
resp = app.post_json(
|
|
2237 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2238 |
params=week_booking_params,
|
|
2239 |
)
|
|
2240 |
assert resp.json['err'] == 0
|
|
2241 |
assert resp.json['updated'] is True
|
|
2242 |
assert operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['IDENTINDIVIDU'] == '50632'
|
|
2243 |
assert (
|
|
2244 |
operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['IDENTACTIVITE']
|
|
2245 |
== activity_id
|
|
2246 |
)
|
|
2247 |
if prefill is True:
|
|
2248 |
assert len(operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR']) == 3
|
|
2249 |
for i, day in enumerate(['2020-09-08', '2020-09-10', '2020-09-11']):
|
|
2250 |
assert (
|
|
2251 |
operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR'][i][
|
|
2252 |
'JOURDATE'
|
|
2253 |
]
|
|
2254 |
== day
|
|
2255 |
)
|
|
2256 |
assert (
|
|
2257 |
operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR'][i]['MATIN']
|
|
2258 |
== 'D'
|
|
2259 |
)
|
|
2260 |
else:
|
|
2261 |
assert len(operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR']) == 1
|
|
2262 |
assert (
|
|
2263 |
operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR'][0]['JOURDATE']
|
|
2264 |
== '2020-09-07'
|
|
2265 |
)
|
|
2266 |
assert (
|
|
2267 |
operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR'][0]['MATIN']
|
|
2268 |
== 'X'
|
|
2269 |
)
|
|
2270 |
|
|
2271 |
|
|
2272 |
@freezegun.freeze_time('2020-08-01')
|
|
2273 |
def test_set_activity_agenda_typical_week_endpoint_prefill_extrascolaire(
|
|
2274 |
app,
|
|
2275 |
resource,
|
|
2276 |
family_data,
|
|
2277 |
week_booking_params,
|
|
2278 |
):
|
|
2279 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
|
2280 |
for activity_id in ['CJ MER', 'CJVACANCES']:
|
|
2281 |
activity = {
|
|
2282 |
'ENTREE': '2020-09-02',
|
|
2283 |
'SORTIE': '2021-08-31',
|
|
2284 |
'IDENTACTIVITE': activity_id,
|
|
2285 |
'LIBELLEACTIVITE': 'FOOBAR',
|
|
2286 |
}
|
|
2287 |
week_booking_params['booking_list'] = ['monday']
|
|
2288 |
week_booking_params['activity_id'] = activity_id
|
|
2289 |
with mock.patch(
|
|
2290 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_family_data',
|
|
2291 |
return_value=family_data,
|
|
2292 |
):
|
|
2293 |
with mock.patch(
|
|
2294 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_child_activities',
|
|
2295 |
return_value={'ACTIVITE': [activity]},
|
|
2296 |
):
|
|
2297 |
bookings = [
|
|
2298 |
{
|
|
2299 |
'id': '50632:%s:2020-09-07' % activity_id,
|
|
2300 |
'disabled': False,
|
|
2301 |
'prefill': False,
|
|
2302 |
},
|
|
2303 |
]
|
|
2304 |
with mock.patch(
|
|
2305 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_bookings',
|
|
2306 |
return_value=bookings,
|
|
2307 |
):
|
|
2308 |
with mock.patch('passerelle.contrib.caluire_axel.schemas.set_agenda') as operation:
|
|
2309 |
operation.return_value = OperationResult(
|
|
2310 |
json_response={'DATA': {'PORTAIL': {'SETAGENDA': {'CODE': 0}}}},
|
|
2311 |
xml_request='',
|
|
2312 |
xml_response='',
|
|
2313 |
)
|
|
2314 |
resp = app.post_json(
|
|
2315 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2316 |
params=week_booking_params,
|
|
2317 |
status=400,
|
|
2318 |
)
|
|
2319 |
assert resp.json['err_desc'] == "Not available for this activity"
|
|
2320 |
assert resp.json['err'] == 'bad-request'
|
|
2321 |
|
|
2322 |
|
|
2323 |
@pytest.mark.parametrize('disabled', [True, False, None])
|
|
2324 |
@freezegun.freeze_time('2020-08-01')
|
|
2325 |
def test_set_activity_agenda_typical_week_endpoint_disabled(
|
|
2326 |
app, resource, family_data, week_booking_params, disabled
|
|
2327 |
):
|
|
2328 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
|
2329 |
activity = {
|
|
2330 |
'ENTREE': '2020-09-02',
|
|
2331 |
'SORTIE': '2021-08-31',
|
|
2332 |
'IDENTACTIVITE': 'FOOBAR',
|
|
2333 |
'LIBELLEACTIVITE': 'FOOBAR',
|
|
2334 |
}
|
|
2335 |
week_booking_params['booking_list'] = ['monday']
|
|
2336 |
week_booking_params['activity_id'] = 'FOOBAR'
|
|
2337 |
with mock.patch(
|
|
2338 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_family_data',
|
|
2339 |
return_value=family_data,
|
|
2340 |
):
|
|
2341 |
with mock.patch(
|
|
2342 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_child_activities',
|
|
2343 |
return_value={'ACTIVITE': [activity]},
|
|
2344 |
):
|
|
2345 |
bookings = []
|
|
2346 |
if disabled is not None:
|
|
2347 |
bookings = [
|
|
2348 |
{
|
|
2349 |
'id': '50632:FOOBAR:2020-09-07',
|
|
2350 |
'disabled': disabled,
|
|
2351 |
'prefill': False,
|
|
2352 |
},
|
|
2353 |
]
|
|
2354 |
with mock.patch(
|
|
2355 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_bookings',
|
|
2356 |
return_value=bookings,
|
|
2357 |
):
|
|
2358 |
with mock.patch('passerelle.contrib.caluire_axel.schemas.set_agenda') as operation:
|
|
2359 |
operation.return_value = OperationResult(
|
|
2360 |
json_response={'DATA': {'PORTAIL': {'SETAGENDA': {'CODE': 0}}}},
|
|
2361 |
xml_request='',
|
|
2362 |
xml_response='',
|
|
2363 |
)
|
|
2364 |
resp = app.post_json(
|
|
2365 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2366 |
params=week_booking_params,
|
|
2367 |
)
|
|
2368 |
assert resp.json['err'] == 0
|
|
2369 |
assert resp.json['updated'] is True
|
|
2370 |
if disabled is False:
|
|
2371 |
assert operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['IDENTINDIVIDU'] == '50632'
|
|
2372 |
assert (
|
|
2373 |
operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['IDENTACTIVITE'] == 'FOOBAR'
|
|
2374 |
)
|
|
2375 |
assert len(operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR']) == 1
|
|
2376 |
assert (
|
|
2377 |
operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR'][0]['JOURDATE']
|
|
2378 |
== '2020-09-07'
|
|
2379 |
)
|
|
2380 |
assert (
|
|
2381 |
operation.call_args_list[0][0][1]['PORTAIL']['SETAGENDA']['ACTIVITE']['JOUR'][0]['MATIN'] == 'X'
|
|
2382 |
)
|
|
2383 |
else:
|
|
2384 |
assert len(operation.call_args_list) == 0
|
|
2385 |
|
|
2386 |
|
|
2387 |
@pytest.mark.parametrize('code', [-1, -2, -3, -4])
|
|
2388 |
def test_set_activity_agenda_typical_week_endpoint_wrong_code(
|
|
2389 |
app, resource, family_data, activities, week_booking_params, code
|
|
2390 |
):
|
|
2391 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
|
2392 |
bookings = [
|
|
2393 |
{
|
|
2394 |
'id': '50632:ELEM:2020-09-07',
|
|
2395 |
'disabled': False,
|
|
2396 |
'prefill': True,
|
|
2397 |
},
|
|
2398 |
]
|
|
2399 |
content = (
|
|
2400 |
'''<PORTAIL>
|
|
2401 |
<SETAGENDA>
|
|
2402 |
<CODE>%s</CODE>
|
|
2403 |
</SETAGENDA>
|
|
2404 |
</PORTAIL>'''
|
|
2405 |
% code
|
|
2406 |
)
|
|
2407 |
with mock_data(content, 'SetAgenda', data_method='setData'):
|
|
2408 |
with mock.patch(
|
|
2409 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_family_data',
|
|
2410 |
return_value=family_data,
|
|
2411 |
):
|
|
2412 |
with mock.patch(
|
|
2413 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_child_activities',
|
|
2414 |
return_value=activities,
|
|
2415 |
):
|
|
2416 |
with mock.patch(
|
|
2417 |
'passerelle.contrib.caluire_axel.models.CaluireAxel.get_bookings',
|
|
2418 |
return_value=bookings,
|
|
2419 |
):
|
|
2420 |
resp = app.post_json(
|
|
2421 |
'/caluire-axel/test/set_activity_agenda_typical_week?NameID=yyy',
|
|
2422 |
params=week_booking_params,
|
|
2423 |
)
|
|
2424 |
assert resp.json['err_desc'] == "Wrong agenda status"
|
|
2425 |
assert resp.json['err'] == 'agenda-code-error-%s' % code
|
|
2426 |
|
|
2427 |
|
2023 |
2428 |
def test_invoices_endpoint_axel_error(app, resource):
|
2024 |
2429 |
Link.objects.create(resource=resource, name_id='yyy', family_id='XXX', person_id='42')
|
2025 |
2430 |
with mock.patch('passerelle.contrib.caluire_axel.schemas.get_factures_a_payer') as operation:
|
2026 |
|
-
|