toulouse-maelis: [functests] add tests on activity service (#76089)
gitea/passerelle/pipeline/head This commit looks good
Details
gitea/passerelle/pipeline/head This commit looks good
Details
This commit is contained in:
parent
5b53826063
commit
b425a2ac80
|
@ -437,6 +437,8 @@ def create_data(request, conn):
|
||||||
'lastname': lastname,
|
'lastname': lastname,
|
||||||
'rl1_num': data['RL1']['num'],
|
'rl1_num': data['RL1']['num'],
|
||||||
'bart_num': data['childList'][0]['num'],
|
'bart_num': data['childList'][0]['num'],
|
||||||
|
'maggie_num': data['childList'][1]['num'],
|
||||||
|
'hugo_num': data['childList'][2]['num'],
|
||||||
'data': data,
|
'data': data,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -508,3 +510,131 @@ def update_data(request, conn):
|
||||||
'maggie_num': data['childList'][2]['num'],
|
'maggie_num': data['childList'][2]['num'],
|
||||||
'data': data,
|
'data': data,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def reference_year():
|
||||||
|
some_date = datetime.date.today()
|
||||||
|
if some_date.month <= 8:
|
||||||
|
# between january and august, reference year is the year just before
|
||||||
|
return some_date.year - 1
|
||||||
|
return some_date.year
|
||||||
|
|
||||||
|
|
||||||
|
def get_subscription_info(nature, activity_text, unit_text, place_text, con, name_id, person_id, year):
|
||||||
|
def select_item(resp, text):
|
||||||
|
item = None
|
||||||
|
for item in resp.json()['data']:
|
||||||
|
if item['text'] == text:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise Exception("do not find '%s'" % text)
|
||||||
|
return item
|
||||||
|
|
||||||
|
# select activity
|
||||||
|
url = con + '/get-person-activity-list'
|
||||||
|
params = {
|
||||||
|
'NameID': name_id,
|
||||||
|
'person_id': person_id,
|
||||||
|
'start_date': '%s-09-01' % year,
|
||||||
|
'end_date': '%s-08-31' % (year + 1),
|
||||||
|
'nature': nature,
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert len(resp.json()['data']) > 0
|
||||||
|
activity = select_item(resp, activity_text)
|
||||||
|
|
||||||
|
# select unit
|
||||||
|
url = con + '/get-person-unit-list'
|
||||||
|
params = {
|
||||||
|
'NameID': name_id,
|
||||||
|
'person_id': person_id,
|
||||||
|
'start_date': '%s-09-01' % year,
|
||||||
|
'end_date': '%s-08-31' % (year + 1),
|
||||||
|
'activity_id': activity['id'],
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert len(resp.json()['data']) > 0
|
||||||
|
unit = select_item(resp, unit_text)
|
||||||
|
|
||||||
|
# select place
|
||||||
|
url = con + '/get-person-place-list'
|
||||||
|
params = {
|
||||||
|
'NameID': name_id,
|
||||||
|
'person_id': person_id,
|
||||||
|
'start_date': '%s-09-01' % year,
|
||||||
|
'end_date': '%s-08-31' % (year + 1),
|
||||||
|
'activity_id': activity['id'],
|
||||||
|
'unit_id': unit['id'],
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert len(resp.json()['data']) > 0
|
||||||
|
place = select_item(resp, place_text)
|
||||||
|
assert place['capacityInfo']['controlOK'] is True
|
||||||
|
|
||||||
|
# check subscription info
|
||||||
|
url = con + '/get-person-subscription-info'
|
||||||
|
params = {
|
||||||
|
'NameID': name_id,
|
||||||
|
'person_id': person_id,
|
||||||
|
'activity_id': activity['id'],
|
||||||
|
'unit_id': unit['id'],
|
||||||
|
'place_id': place['id'],
|
||||||
|
'ref_date': datetime.date.today().strftime('%Y-%m-%d'),
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
info = resp.json()['data']
|
||||||
|
assert info['controlResult']['controlOK'] is True
|
||||||
|
return {
|
||||||
|
'activity': activity,
|
||||||
|
'unit': unit,
|
||||||
|
'place': place,
|
||||||
|
'info': info,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def extrasco_subscribe_info(conn, create_data, reference_year):
|
||||||
|
unlink(conn, create_data['name_id'])
|
||||||
|
link(conn, create_data)
|
||||||
|
|
||||||
|
return get_subscription_info(
|
||||||
|
'EXTRASCO',
|
||||||
|
# Sigec made this extra-sco activity available for functests
|
||||||
|
'ADL ELEMENTAIRE Maourine Avril 2023',
|
||||||
|
'ADL ELEMENTAIRE Maourine Avril 2023',
|
||||||
|
'MAOURINE (la) ELEMENTAIRE',
|
||||||
|
conn,
|
||||||
|
create_data['name_id'],
|
||||||
|
create_data['bart_num'],
|
||||||
|
reference_year,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def perisco_subscribe_info(conn, create_data, reference_year):
|
||||||
|
'''This fixture is a configuration trick from Sigec
|
||||||
|
as peri-sco should not be available for subscription
|
||||||
|
and as a consequence, should not be displayed from catalogs'''
|
||||||
|
unlink(conn, create_data['name_id'])
|
||||||
|
link(conn, create_data)
|
||||||
|
|
||||||
|
return get_subscription_info(
|
||||||
|
None,
|
||||||
|
# Sigec made this peri-sco activity available for functests
|
||||||
|
'TEMPS DU MIDI 22/23',
|
||||||
|
'TEMPS DU MIDI 22/23',
|
||||||
|
'DOLTO FRANCOISE MATERNELLE',
|
||||||
|
conn,
|
||||||
|
create_data['name_id'],
|
||||||
|
create_data['bart_num'],
|
||||||
|
reference_year,
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,174 @@
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
def test_perisco(perisco_subscribe_info):
|
||||||
|
assert perisco_subscribe_info['info']['activity']['libelle1'] == 'TEMPS DU MIDI 22/23'
|
||||||
|
|
||||||
|
|
||||||
|
def test_perisco_agenda(conn, create_data, perisco_subscribe_info):
|
||||||
|
# subscription
|
||||||
|
url = conn + '/add-person-subscription?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': perisco_subscribe_info['activity']['id'],
|
||||||
|
'unit_id': perisco_subscribe_info['unit']['id'],
|
||||||
|
'place_id': perisco_subscribe_info['place']['id'],
|
||||||
|
'start_date': perisco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': perisco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
|
||||||
|
# find first available booking
|
||||||
|
url = conn + '/read-child-agenda?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'child_id': create_data['bart_num'],
|
||||||
|
'start_date': perisco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': perisco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert len(resp.json()['data']) > 0
|
||||||
|
booking = None
|
||||||
|
for booking in resp.json()['data']:
|
||||||
|
if booking['disabled'] is False:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise Exception("no booking available")
|
||||||
|
assert booking['details']['activity_id'] == perisco_subscribe_info['activity']['id']
|
||||||
|
assert booking['prefill'] is False
|
||||||
|
|
||||||
|
# book activity
|
||||||
|
url = conn + '/update-child-agenda?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'child_id': create_data['bart_num'],
|
||||||
|
'start_date': perisco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': perisco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
'booking_list': [booking['id']],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json() == {
|
||||||
|
'updated': True,
|
||||||
|
'count': 1,
|
||||||
|
'changes': [
|
||||||
|
{
|
||||||
|
'booked': True,
|
||||||
|
'activity_id': booking['details']['activity_id'],
|
||||||
|
'activity_label': 'Restauration scolaire',
|
||||||
|
'day': booking['details']['day_str'],
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'err': 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
# check booking
|
||||||
|
url = conn + '/read-child-agenda?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'child_id': create_data['bart_num'],
|
||||||
|
'start_date': perisco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': perisco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert [x['prefill'] for x in resp.json()['data'] if x['id'] == booking['id']][0] is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_perisco_recurrent_week(conn, create_data, perisco_subscribe_info, reference_year):
|
||||||
|
# no subscribed activity
|
||||||
|
url = conn + '/read-subscribe-activity-list?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'person_id': create_data['maggie_num'],
|
||||||
|
'nature': 'PERISCO',
|
||||||
|
'school_year': '%s-%s' % (reference_year, reference_year + 1),
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert len(resp.json()['data']) == 0
|
||||||
|
|
||||||
|
# subscription
|
||||||
|
url = conn + '/add-person-subscription?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['maggie_num'],
|
||||||
|
'activity_id': perisco_subscribe_info['activity']['id'],
|
||||||
|
'unit_id': perisco_subscribe_info['unit']['id'],
|
||||||
|
'place_id': perisco_subscribe_info['place']['id'],
|
||||||
|
'start_date': perisco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': perisco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
|
||||||
|
url = conn + '/read-subscribe-activity-list?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'person_id': create_data['maggie_num'],
|
||||||
|
'nature': 'PERISCO',
|
||||||
|
'school_year': '%s-%s' % (reference_year, reference_year + 1),
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert len(resp.json()['data']) == 1
|
||||||
|
assert resp.json()['data'][0]['id'] == perisco_subscribe_info['activity']['id']
|
||||||
|
|
||||||
|
# get recurent-week gabarit
|
||||||
|
url = conn + '/get-recurrent-week?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'person_id': create_data['maggie_num'],
|
||||||
|
'activity_id': perisco_subscribe_info['activity']['id'],
|
||||||
|
'ref_date': datetime.date.today().strftime('%Y-%m-%d'),
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert [(x['id'], x['day']) for x in resp.json()['data']] == [
|
||||||
|
('1-X', 'Lundi'),
|
||||||
|
('2-X', 'Mardi'),
|
||||||
|
('4-X', 'Jeudi'),
|
||||||
|
('5-X', 'Vendredi'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# no booking
|
||||||
|
url = conn + '/read-child-agenda?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'child_id': create_data['maggie_num'],
|
||||||
|
'start_date': perisco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': perisco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert not any(x['prefill'] for x in resp.json()['data'])
|
||||||
|
|
||||||
|
# set recurent-week gabarit
|
||||||
|
url = conn + '/update-recurrent-week?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['maggie_num'],
|
||||||
|
'activity_id': perisco_subscribe_info['activity']['id'],
|
||||||
|
'start_date': perisco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': perisco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
'recurrent_week': ['1-X', '2-X'],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert resp.json()['data'] == 'ok'
|
||||||
|
|
||||||
|
# there is now some bookings
|
||||||
|
url = conn + '/read-child-agenda?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'child_id': create_data['maggie_num'],
|
||||||
|
'start_date': perisco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': perisco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert any(x['prefill'] for x in resp.json()['data'])
|
|
@ -0,0 +1,21 @@
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from .conftest import link, unlink
|
||||||
|
|
||||||
|
# LOISIR is a subset of EXTRACO, we only test the genaral catalog cell here
|
||||||
|
|
||||||
|
|
||||||
|
def test_catalog_general_loisirs(conn, update_data):
|
||||||
|
unlink(conn, update_data['name_id'])
|
||||||
|
link(conn, update_data)
|
||||||
|
url = conn + '/read-activity-list'
|
||||||
|
params = {'ref_date': datetime.date.today().strftime('%Y-%m-%d')}
|
||||||
|
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
|
||||||
|
# still not nature code defined on LOISIR activities
|
||||||
|
assert len(resp.json()['data']) == 0
|
|
@ -0,0 +1,198 @@
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
def test_catalog_personnalise_extrasco(extrasco_subscribe_info):
|
||||||
|
assert extrasco_subscribe_info['info']['activity']['libelle1'] == 'ADL ELEMENTAIRE Maourine Avril 2023'
|
||||||
|
assert extrasco_subscribe_info['info']['calendarGeneration']['code'] == 'REQUIRED'
|
||||||
|
assert extrasco_subscribe_info['info']['billingInformation'] == {
|
||||||
|
'modeFact': 'PRESENCE',
|
||||||
|
'quantity': None,
|
||||||
|
'unitPrice': 43.0,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_direct_subscribe(conn, create_data, extrasco_subscribe_info, reference_year):
|
||||||
|
assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True
|
||||||
|
|
||||||
|
url = conn + '/add-person-subscription?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['hugo_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'unit_id': extrasco_subscribe_info['unit']['id'],
|
||||||
|
'place_id': extrasco_subscribe_info['place']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
|
||||||
|
# no idIns provided to remove subscription later
|
||||||
|
assert resp.json()['data'] == {'controlOK': True, 'message': None}
|
||||||
|
|
||||||
|
|
||||||
|
def test_subscribe_with_conveyance(conn, create_data, extrasco_subscribe_info):
|
||||||
|
assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True
|
||||||
|
|
||||||
|
assert extrasco_subscribe_info['info']['conveyance'] is not None
|
||||||
|
morning = [
|
||||||
|
x['id'] for x in extrasco_subscribe_info['info']['conveyance']['morningJourney']['depositPlaceList']
|
||||||
|
]
|
||||||
|
afternoon = [
|
||||||
|
x['id'] for x in extrasco_subscribe_info['info']['conveyance']['afternoonJourney']['depositPlaceList']
|
||||||
|
]
|
||||||
|
assert len(morning) > 0
|
||||||
|
assert len(afternoon) > 0
|
||||||
|
|
||||||
|
url = conn + '/add-person-basket-subscription?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'unit_id': extrasco_subscribe_info['unit']['id'],
|
||||||
|
'place_id': extrasco_subscribe_info['place']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
'conveyanceSubscribe/idPlaceMorning': morning[0],
|
||||||
|
'conveyanceSubscribe/idPlaceAfternoon': afternoon[0],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
basket_id = resp.json()['data']['basket']['id']
|
||||||
|
|
||||||
|
# remove subscription
|
||||||
|
url = conn + '/delete-basket?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {'basket_id': basket_id}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_subscribe_with_recurrent_week(conn, create_data, extrasco_subscribe_info):
|
||||||
|
assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True
|
||||||
|
assert [(x['id'], x['day']) for x in extrasco_subscribe_info['info']['recurrent_week']] == [
|
||||||
|
('1-C', 'Lundi'),
|
||||||
|
('1-B', 'Lundi'),
|
||||||
|
('2-C', 'Mardi'),
|
||||||
|
('2-B', 'Mardi'),
|
||||||
|
('3-C', 'Mercredi'),
|
||||||
|
('3-B', 'Mercredi'),
|
||||||
|
('4-C', 'Jeudi'),
|
||||||
|
('4-B', 'Jeudi'),
|
||||||
|
('5-C', 'Vendredi'),
|
||||||
|
('5-B', 'Vendredi'),
|
||||||
|
]
|
||||||
|
|
||||||
|
url = conn + '/add-person-basket-subscription?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'unit_id': extrasco_subscribe_info['unit']['id'],
|
||||||
|
'place_id': extrasco_subscribe_info['place']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
'recurrent_week': ['1-B', '2-C'],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
basket_id = resp.json()['data']['basket']['id']
|
||||||
|
|
||||||
|
# there is now some bookings
|
||||||
|
url = conn + '/read-activity-agenda?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert any(x['prefill'] for x in resp.json()['data'])
|
||||||
|
|
||||||
|
# remove subscription
|
||||||
|
url = conn + '/delete-basket?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {'basket_id': basket_id}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_subscribe_with_agenda(conn, create_data, extrasco_subscribe_info):
|
||||||
|
assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True
|
||||||
|
|
||||||
|
def get_bookings():
|
||||||
|
url = conn + '/read-activity-agenda?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
return resp.json()['data']
|
||||||
|
|
||||||
|
# subscribe witout providing calandar
|
||||||
|
url = conn + '/add-person-basket-subscription?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'unit_id': extrasco_subscribe_info['unit']['id'],
|
||||||
|
'place_id': extrasco_subscribe_info['place']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
basket_id = resp.json()['data']['basket']['id']
|
||||||
|
|
||||||
|
# no booking
|
||||||
|
assert not any(x['prefill'] for x in get_bookings())
|
||||||
|
|
||||||
|
# book using info calendar gabarit (booking registered from w.c.s. form)
|
||||||
|
assert len(extrasco_subscribe_info['info']['agenda']) > 0
|
||||||
|
assert not any(x['prefill'] for x in extrasco_subscribe_info['info']['agenda'])
|
||||||
|
slots = [x['id'] for x in extrasco_subscribe_info['info']['agenda'] if x['disabled'] is False]
|
||||||
|
url = conn + '/update-activity-agenda/?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
'booking_list': [slots[0], slots[-1]],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert resp.json()['updated'] is True
|
||||||
|
assert [x['booked'] for x in resp.json()['changes']] == [True, True]
|
||||||
|
|
||||||
|
# there is now 2 bookings
|
||||||
|
assert len([x['prefill'] for x in get_bookings() if x['prefill'] is True]) == 2
|
||||||
|
|
||||||
|
# unbook slots
|
||||||
|
url = conn + '/update-activity-agenda/?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
'booking_list': [],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert resp.json()['updated'] is True
|
||||||
|
assert [x['booked'] for x in resp.json()['changes']] == [False, False]
|
||||||
|
assert not any(x['prefill'] for x in get_bookings())
|
||||||
|
|
||||||
|
# remove subscription
|
||||||
|
url = conn + '/delete-basket?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {'basket_id': basket_id}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
|
@ -0,0 +1,190 @@
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_year):
|
||||||
|
assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True
|
||||||
|
|
||||||
|
def get_baskets():
|
||||||
|
url = conn + '/get-baskets?NameID=%s' % create_data['name_id']
|
||||||
|
resp = requests.get(url)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
return resp.json()['data']
|
||||||
|
|
||||||
|
def subscribe(person_id):
|
||||||
|
url = conn + '/add-person-basket-subscription?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': person_id,
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'unit_id': extrasco_subscribe_info['unit']['id'],
|
||||||
|
'place_id': extrasco_subscribe_info['place']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
return resp
|
||||||
|
|
||||||
|
def subscriptions(person_id):
|
||||||
|
url = conn + '/read-subscribe-activity-list?NameID=%s' % create_data['name_id']
|
||||||
|
params = {
|
||||||
|
'person_id': person_id,
|
||||||
|
'nature': 'EXTRASCO',
|
||||||
|
'school_year': '%s-%s' % (reference_year, reference_year + 1),
|
||||||
|
}
|
||||||
|
resp = requests.get(url, params=params)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
return resp.json()['data']
|
||||||
|
|
||||||
|
# no subscription
|
||||||
|
assert subscriptions(create_data['bart_num']) == []
|
||||||
|
assert subscriptions(create_data['maggie_num']) == []
|
||||||
|
|
||||||
|
# empty basket
|
||||||
|
assert get_baskets() == []
|
||||||
|
|
||||||
|
# subscribe Bart
|
||||||
|
resp = subscribe(create_data['bart_num'])
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert data['controlResult'] == {'controlOK': True, 'message': None}
|
||||||
|
assert data['basket']['codeRegie'] == 105
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data['basket']['lignes']}) == 1
|
||||||
|
assert len({x['idIns'] for x in data['basket']['lignes']}) == 3
|
||||||
|
|
||||||
|
assert len(subscriptions(create_data['bart_num'])) == 1
|
||||||
|
assert subscriptions(create_data['maggie_num']) == []
|
||||||
|
|
||||||
|
# basket
|
||||||
|
data = get_baskets()
|
||||||
|
assert len(data) == 1
|
||||||
|
assert data[0]['codeRegie'] == 105
|
||||||
|
assert data[0]['text'] == 'ENFANCE LOISIRS ET PE'
|
||||||
|
assert len(data[0]['lignes']) == 3
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data[0]['lignes']}) == 1
|
||||||
|
|
||||||
|
# get 3 idIns because we subscribe a generic unit
|
||||||
|
assert len({x['idIns'] for x in data[0]['lignes']}) == 3
|
||||||
|
basket_id = data[0]['id']
|
||||||
|
|
||||||
|
# cannot subscribe Bart twice
|
||||||
|
resp = subscribe(create_data['bart_num'])
|
||||||
|
assert resp.json()['err'] == 1
|
||||||
|
# assert 'E1019' in resp.json()['err_desc'] #2206
|
||||||
|
assert len(get_baskets()) == 1
|
||||||
|
|
||||||
|
# delete basket
|
||||||
|
# should be call by user or by cron job
|
||||||
|
url = conn + '/delete-basket?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {'basket_id': basket_id}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert resp.json()['data'] == 'ok'
|
||||||
|
assert get_baskets() == []
|
||||||
|
assert subscriptions(create_data['bart_num']) == []
|
||||||
|
|
||||||
|
# subscribe Bart
|
||||||
|
resp = subscribe(create_data['bart_num'])
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert data['controlResult'] == {'controlOK': True, 'message': None}
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data['basket']['lignes']}) == 1
|
||||||
|
assert len(subscriptions(create_data['bart_num'])) == 1
|
||||||
|
|
||||||
|
# subscribe Maggie
|
||||||
|
resp = subscribe(create_data['maggie_num'])
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert data['controlResult'] == {'controlOK': True, 'message': None}
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data['basket']['lignes']}) == 2
|
||||||
|
assert len(subscriptions(create_data['maggie_num'])) == 1
|
||||||
|
|
||||||
|
# delete (generic) basket line for Bart
|
||||||
|
data = get_baskets()
|
||||||
|
assert len(data) == 1
|
||||||
|
assert len(data[0]['lignes']) == 6
|
||||||
|
basket_id = data[0]['id']
|
||||||
|
# idIns for the generic unit
|
||||||
|
line_id = [
|
||||||
|
y['id']
|
||||||
|
for x in data
|
||||||
|
for y in x['lignes']
|
||||||
|
if y['personneInfo']['numPerson'] == int(create_data['bart_num'])
|
||||||
|
if y['inscription']['idUnit'] == extrasco_subscribe_info['unit']['id']
|
||||||
|
][0]
|
||||||
|
url = conn + '/delete-basket-line?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'basket_id': basket_id,
|
||||||
|
'line_id': line_id,
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert data['codeRegie'] == None # #2207
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data['lignes']}) == 1
|
||||||
|
assert len({x['idIns'] for x in data['lignes']}) == 3
|
||||||
|
data = get_baskets()
|
||||||
|
assert len(data) == 1
|
||||||
|
assert len(get_baskets()) == 1
|
||||||
|
assert len(data[0]['lignes']) == 3
|
||||||
|
assert subscriptions(create_data['bart_num']) == []
|
||||||
|
assert len(subscriptions(create_data['maggie_num'])) == 1
|
||||||
|
|
||||||
|
# re-subscribe Bart
|
||||||
|
resp = subscribe(create_data['bart_num'])
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert data['controlResult'] == {'controlOK': True, 'message': None}
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data['basket']['lignes']}) == 2
|
||||||
|
assert len(subscriptions(create_data['bart_num'])) == 1
|
||||||
|
|
||||||
|
# add bookings to Bart
|
||||||
|
slots = [x['id'] for x in extrasco_subscribe_info['info']['agenda'] if x['disabled'] is False]
|
||||||
|
url = conn + '/update-activity-agenda/?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['bart_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
'booking_list': [slots[0], slots[-1]],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert resp.json()['updated'] is True
|
||||||
|
assert [x['booked'] for x in resp.json()['changes']] == [True, True]
|
||||||
|
|
||||||
|
# add bookings to Maggie
|
||||||
|
slots = [':'.join([create_data['maggie_num']] + x.split(':')[1:]) for x in slots]
|
||||||
|
url = conn + '/update-activity-agenda/?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': create_data['maggie_num'],
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
'booking_list': [slots[0], slots[-1]],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
assert resp.json()['updated'] is True
|
||||||
|
assert [x['booked'] for x in resp.json()['changes']] == [True, True]
|
||||||
|
|
||||||
|
# validate basket
|
||||||
|
url = conn + '/validate-basket?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {'basket_id': basket_id}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert len(data['idInsLst']) == 6
|
||||||
|
assert len(data['factureLst']) == 0 # No invoice #2187
|
||||||
|
assert get_baskets() == []
|
||||||
|
|
||||||
|
assert len(subscriptions(create_data['bart_num'])) == 1
|
||||||
|
assert len(subscriptions(create_data['maggie_num'])) == 1
|
||||||
|
|
||||||
|
# call cancelInvoiceAndDeleteSubscribeList de remove subscriptions
|
|
@ -1,3 +1,4 @@
|
||||||
|
import pytest
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from .conftest import diff, link, unlink
|
from .conftest import diff, link, unlink
|
||||||
|
@ -34,3 +35,75 @@ def test_direct_debit_order(conn, create_data):
|
||||||
res = resp.json()
|
res = resp.json()
|
||||||
res['data']['numPerson'] = 'N/A'
|
res['data']['numPerson'] = 'N/A'
|
||||||
assert diff(res['data'], 'test_get_rl1_direct_debit_order.json')
|
assert diff(res['data'], 'test_get_rl1_direct_debit_order.json')
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xfail(run=False)
|
||||||
|
def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_year):
|
||||||
|
assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True
|
||||||
|
|
||||||
|
def get_baskets():
|
||||||
|
url = conn + '/get-baskets?NameID=%s' % create_data['name_id']
|
||||||
|
resp = requests.get(url)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
return resp.json()['data']
|
||||||
|
|
||||||
|
def subscribe(person_id):
|
||||||
|
url = conn + '/add-person-basket-subscription?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {
|
||||||
|
'person_id': person_id,
|
||||||
|
'activity_id': extrasco_subscribe_info['activity']['id'],
|
||||||
|
'unit_id': extrasco_subscribe_info['unit']['id'],
|
||||||
|
'place_id': extrasco_subscribe_info['place']['id'],
|
||||||
|
'start_date': extrasco_subscribe_info['unit']['dateStart'][:10],
|
||||||
|
'end_date': extrasco_subscribe_info['unit']['dateEnd'][:10],
|
||||||
|
}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
return resp
|
||||||
|
|
||||||
|
# empty basket
|
||||||
|
assert get_baskets() == []
|
||||||
|
|
||||||
|
# subscribe Bart
|
||||||
|
resp = subscribe(create_data['bart_num'])
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert data['controlResult'] == {'controlOK': True, 'message': None}
|
||||||
|
assert data['basket']['codeRegie'] == 105
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data['basket']['lignes']}) == 1
|
||||||
|
assert len({x['idIns'] for x in data['basket']['lignes']}) == 3
|
||||||
|
|
||||||
|
# subscribe Maggie
|
||||||
|
resp = subscribe(create_data['maggie_num'])
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert data['controlResult'] == {'controlOK': True, 'message': None}
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data['basket']['lignes']}) == 2
|
||||||
|
|
||||||
|
# basket
|
||||||
|
data = get_baskets()
|
||||||
|
assert len(data) == 1
|
||||||
|
assert data[0]['codeRegie'] == 105
|
||||||
|
assert data[0]['text'] == 'ENFANCE LOISIRS ET PE'
|
||||||
|
assert len(data[0]['lignes']) == 3
|
||||||
|
assert len({x['personneInfo']['numPerson'] for x in data[0]['lignes']}) == 1
|
||||||
|
|
||||||
|
# get 3 idIns because we subscribe a generic unit
|
||||||
|
assert len({x['idIns'] for x in data[0]['lignes']}) == 3
|
||||||
|
basket_id = data[0]['id']
|
||||||
|
|
||||||
|
# validate basket
|
||||||
|
url = conn + '/validate-basket?NameID=%s' % create_data['name_id']
|
||||||
|
payload = {'basket_id': basket_id}
|
||||||
|
resp = requests.post(url, json=payload)
|
||||||
|
resp.raise_for_status()
|
||||||
|
assert resp.json()['err'] == 0
|
||||||
|
data = resp.json()['data']
|
||||||
|
assert len(data['idInsLst']) == 6
|
||||||
|
assert len(data['factureLst']) == 0
|
||||||
|
assert get_baskets() == []
|
||||||
|
|
||||||
|
# to continue :
|
||||||
|
# cancelInvoiceAndDeleteSubscribeList
|
||||||
|
# payInvoice
|
||||||
|
|
Loading…
Reference in New Issue