toulouse-maelis: [functests] add test for adultes on perisco (#77634)

This commit is contained in:
Nicolas Roche 2023-05-17 16:17:58 +02:00
parent 59a63d266f
commit b5b57b5d97
2 changed files with 263 additions and 0 deletions

View File

@ -465,6 +465,57 @@ def create_data(request, conn):
}
@pytest.fixture(scope='session')
def create_data2(request, conn, reference_year):
name_id = request.config.getoption('--nameid')
unlink(conn, name_id)
lastname = 'TEST_' + uuid4().hex[0:25]
# create family that is not located into Toulouse
create_family_payload = copy.deepcopy(FAMILY_PAYLOAD)
create_family_payload['rl1']['lastname'] = lastname
create_family_payload['rl1']['adresse'] = create_family_payload['rl2']['adresse']
create_family_payload['rl2']['adresse'] = copy.deepcopy(FAMILY_PAYLOAD['rl1']['adresse'])
for child in create_family_payload['childList']:
child['lastname'] = lastname
url = conn + '/create-family?NameID=%s' % name_id
resp = requests.post(url, json=create_family_payload)
resp.raise_for_status()
create_result = resp.json()
assert create_result['err'] == 0
# add requiered quotient for subscriptions
data = read_family(conn, name_id)
url = conn + '/update-quotient?NameID=%s&rl_id=%s' % (name_id, data['RL1']['num'])
payload = {
'yearRev': str(reference_year),
'dateStart': '2023-05-15',
'dateEnd': '3000-12-31',
'mtt': '5000.0',
'cdquo': '1',
}
resp = requests.post(url, json=payload)
resp.raise_for_status()
assert resp.json()['err'] == 0
print('\ncreate DUI again: %s' % str(create_result['data']['number']))
data = diff_family(conn, name_id, 'test_create_family_out_town.json')
return {
'name_id': name_id, # linked
'family_id': str(create_result['data']['number']),
'family_payload': create_family_payload,
'lastname': lastname,
'rl1_num': data['RL1']['num'],
'rl2_num': data['RL2']['num'],
'bart_num': data['childList'][0]['num'],
'maggie_num': data['childList'][2]['num'],
'hugo_num': data['childList'][3]['num'],
'data': data,
}
@pytest.fixture(scope='session')
def update_data(request, conn):
name_id = request.config.getoption('--nameid')
@ -678,3 +729,24 @@ def perisco_subscribe_info(conn, create_data, reference_year):
create_data['bart_num'],
reference_year,
)
@pytest.fixture(scope='session')
def perisco_subscribe_adulte_info(conn, create_data2, 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_data2['name_id'])
link(conn, create_data2)
return get_subscription_info(
None,
# Sigec made this peri-sco activity available for functests
'RESTAURATION ADULTE',
'TEST RESTAURATION ADULTE 22/23',
'DOLTO FRANCOISE MATERNELLE',
conn,
create_data2['name_id'],
create_data2['bart_num'],
reference_year,
)

View File

@ -1,13 +1,23 @@
import datetime
import pytest
import requests
from .conftest import link, unlink
def test_perisco(perisco_subscribe_info):
assert perisco_subscribe_info['info']['activity']['libelle1'] == 'TEST TEMPS DU MIDI 22/23'
def test_perisco_adulte(perisco_subscribe_adulte_info):
assert perisco_subscribe_adulte_info['info']['activity']['libelle1'] == 'TEST RESTAURATION ADULTE 22/23'
def test_perisco_agenda(conn, create_data, perisco_subscribe_info):
unlink(conn, create_data['name_id'])
link(conn, create_data)
# subscription
url = conn + '/add-person-subscription?NameID=%s' % create_data['name_id']
payload = {
@ -80,7 +90,86 @@ def test_perisco_agenda(conn, create_data, perisco_subscribe_info):
assert [x['prefill'] for x in resp.json()['data'] if x['id'] == booking['id']][0] is True
def test_perisco_agenda_adulte(conn, create_data2, perisco_subscribe_adulte_info):
unlink(conn, create_data2['name_id'])
link(conn, create_data2)
# subscription
url = conn + '/add-person-subscription?NameID=%s' % create_data2['name_id']
payload = {
'person_id': create_data2['rl1_num'],
'activity_id': perisco_subscribe_adulte_info['activity']['id'],
'unit_id': perisco_subscribe_adulte_info['unit']['id'],
'place_id': perisco_subscribe_adulte_info['place']['id'],
'start_date': perisco_subscribe_adulte_info['unit']['dateStart'][:10],
'end_date': perisco_subscribe_adulte_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_data2['name_id']
params = {
'child_id': create_data2['rl1_num'],
'start_date': perisco_subscribe_adulte_info['unit']['dateStart'][:10],
'end_date': perisco_subscribe_adulte_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_adulte_info['activity']['id']
assert booking['details']['activity_label'] == 'RESTAURATION ADULTE'
assert booking['prefill'] is False
# book activity
url = conn + '/update-child-agenda?NameID=%s' % create_data2['name_id']
payload = {
'child_id': create_data2['rl1_num'],
'start_date': perisco_subscribe_adulte_info['unit']['dateStart'][:10],
'end_date': perisco_subscribe_adulte_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 ADULTE',
'day': booking['details']['day_str'],
}
],
'err': 0,
}
# check booking
url = conn + '/read-child-agenda?NameID=%s' % create_data2['name_id']
params = {
'child_id': create_data2['rl1_num'],
'start_date': perisco_subscribe_adulte_info['unit']['dateStart'][:10],
'end_date': perisco_subscribe_adulte_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):
unlink(conn, create_data['name_id'])
link(conn, create_data)
# no subscribed activity
url = conn + '/read-subscribe-activity-list?NameID=%s' % create_data['name_id']
params = {
@ -176,3 +265,105 @@ def test_perisco_recurrent_week(conn, create_data, perisco_subscribe_info, refer
resp.raise_for_status()
assert resp.json()['err'] == 0
assert any(x['prefill'] for x in resp.json()['data'])
def test_perisco_recurrent_week_adulte(conn, create_data2, perisco_subscribe_adulte_info, reference_year):
unlink(conn, create_data2['name_id'])
link(conn, create_data2)
# no subscribed activity
url = conn + '/read-subscribe-activity-list?NameID=%s' % create_data2['name_id']
params = {
'person_id': create_data2['rl2_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_data2['name_id']
payload = {
'person_id': create_data2['rl2_num'],
'activity_id': perisco_subscribe_adulte_info['activity']['id'],
'unit_id': perisco_subscribe_adulte_info['unit']['id'],
'place_id': perisco_subscribe_adulte_info['place']['id'],
'start_date': perisco_subscribe_adulte_info['unit']['dateStart'][:10],
'end_date': perisco_subscribe_adulte_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_data2['name_id']
params = {
'person_id': create_data2['rl2_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_adulte_info['activity']['id']
assert [(x['text'], x['libelle'], x['libelle2']) for x in resp.json()['data']] == [
('RESTAURATION ADULTE', 'TEST RESTAURATION ADULTE 22/23', 'RESTAURATION ADULTE')
]
# get recurent-week gabarit
url = conn + '/get-recurrent-week?NameID=%s' % create_data2['name_id']
params = {
'person_id': create_data2['rl2_num'],
'activity_id': perisco_subscribe_adulte_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'),
('3-X', 'Mercredi'),
('4-X', 'Jeudi'),
('5-X', 'Vendredi'),
]
# no booking
url = conn + '/read-child-agenda?NameID=%s' % create_data2['name_id']
params = {
'child_id': create_data2['rl2_num'],
'start_date': perisco_subscribe_adulte_info['unit']['dateStart'][:10],
'end_date': perisco_subscribe_adulte_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_data2['name_id']
payload = {
'person_id': create_data2['rl2_num'],
'activity_id': perisco_subscribe_adulte_info['activity']['id'],
'start_date': perisco_subscribe_adulte_info['unit']['dateStart'][:10],
'end_date': perisco_subscribe_adulte_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_data2['name_id']
params = {
'child_id': create_data2['rl2_num'],
'start_date': perisco_subscribe_adulte_info['unit']['dateStart'][:10],
'end_date': perisco_subscribe_adulte_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'])