diff --git a/functests/toulouse_maelis/conftest.py b/functests/toulouse_maelis/conftest.py index 3004415a..ce7b43f3 100644 --- a/functests/toulouse_maelis/conftest.py +++ b/functests/toulouse_maelis/conftest.py @@ -707,8 +707,8 @@ def get_extrasco_subscribe_info(con, data, year): return get_subscription_info( 'EXTRASCO', # Sigec made this extra-sco activity available for functests - 'TEST ADL ELEMENTAIRE Maourine Juin', - 'TEST ADL ELEMENTAIRE Maourine FEVRIER 22/23', + 'ADL ELEMENTAIRE Maourine Juin', + 'PUBLIK ADL ELEMENTAIRE Maourine JUIN 22/23(NE PAS UTILISER)', 'MAOURINE (la) ELEMENTAIRE', con, data['name_id'], @@ -717,6 +717,20 @@ def get_extrasco_subscribe_info(con, data, year): ) +def get_extrasco_subscribe_info2(con, data, year): + return get_subscription_info( + 'EXTRASCO', + # Sigec made this extra-sco activity available for functests + 'ADL MATERNELLE Lardenne Juin', + 'PUBLIK ADL MATER JOURNEE AVEC REPAS', + 'LARDENNE MATERNELLE', + con, + data['name_id'], + data['bart_num'], + year, + ) + + @pytest.fixture(scope='session') def loisirs_subscribe_info(conn, create_data, reference_year): unlink(conn, create_data['name_id']) @@ -738,6 +752,13 @@ def extrasco_subscribe_info(conn, create_data, reference_year): return get_extrasco_subscribe_info(conn, create_data, reference_year) +@pytest.fixture(scope='session') +def extrasco_subscribe_info2(conn, create_data, reference_year): + unlink(conn, create_data['name_id']) + link(conn, create_data) + return get_extrasco_subscribe_info2(conn, create_data, reference_year) + + @pytest.fixture(scope='session') def perisco_subscribe_info(conn, create_data, reference_year): '''This fixture is a configuration trick from Sigec diff --git a/functests/toulouse_maelis/test_07_extrasco.py b/functests/toulouse_maelis/test_07_extrasco.py index 8f449d5e..1bcc8c31 100644 --- a/functests/toulouse_maelis/test_07_extrasco.py +++ b/functests/toulouse_maelis/test_07_extrasco.py @@ -2,21 +2,48 @@ import pytest import requests -@pytest.mark.xfail(run=False) def test_catalog_personnalise_extrasco(extrasco_subscribe_info): assert ( extrasco_subscribe_info['info']['activity']['libelle1'] - == 'TEST ADL ELEMENTAIRE Maourine FEVRIER 22/23' + == 'PUBLIK ADL ELEMENTAIRE Maourine JUIN 22/23(NE PAS UTILISER)' ) assert extrasco_subscribe_info['info']['calendarGeneration']['code'] == 'REQUIRED' assert extrasco_subscribe_info['info']['billingInformation'] == { 'modeFact': 'PRESENCE', 'quantity': None, - 'unitPrice': 43.0, + 'unitPrice': 11.5, } + assert extrasco_subscribe_info['info']['activity']['blocNoteList'] == [ + { + 'note': 'Lien vers le réglement intérieur :\r\nhttps://portail-parsifal.test.entrouvert.org/media/uploads/2023/03/23/flyer-sejour.pdf\r\nLien vers arrêté municipal :\r\nhttps://portail-parsifal.test.entrouvert.org/media/uploads/2023/04/05/arrete-municipal.pdf', + 'numIndex': 1, + } + ] + assert ( + extrasco_subscribe_info['info']['agenda'][0]['details']['activity_label'] + == 'ADL ELEMENTAIRE Maourine Juin' + ) + + +def test_catalog_personnalise_extrasco2(extrasco_subscribe_info2): + assert ( + extrasco_subscribe_info2['info']['activity']['libelle1'] + == 'PUBLIK ADL MATERNELLE Lardenne JUIN 22/23 (NEPAS UTILISER)' + ) + assert extrasco_subscribe_info2['info']['calendarGeneration']['code'] == 'FORBIDDEN' + assert extrasco_subscribe_info2['info']['billingInformation'] == { + 'modeFact': 'PRESENCE', + 'quantity': None, + 'unitPrice': 11.5, + } + assert extrasco_subscribe_info2['info']['activity']['blocNoteList'] == [ + { + 'note': 'Lien vers le réglement intérieur :\r\nhttps://portail-parsifal.test.entrouvert.org/media/uploads/2023/03/23/flyer-sejour.pdf\r\nLien vers arrêté municipal :\r\nhttps://portail-parsifal.test.entrouvert.org/media/uploads/2023/04/05/arrete-municipal.pdf', + 'numIndex': 1, + } + ] -@pytest.mark.xfail(run=False) def test_direct_subscribe(conn, create_data, extrasco_subscribe_info, reference_year): assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True @@ -74,20 +101,14 @@ def test_subscribe_with_conveyance(conn, create_data, extrasco_subscribe_info): assert resp.json()['err'] == 0 -@pytest.mark.xfail(run=False) 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'), + ('1-X', 'Lundi'), + ('2-X', 'Mardi'), + ('3-X', 'Mercredi'), + ('4-X', 'Jeudi'), + ('5-X', 'Vendredi'), ] url = conn + '/add-person-basket-subscription?NameID=%s' % create_data['name_id'] @@ -98,7 +119,7 @@ def test_subscribe_with_recurrent_week(conn, create_data, extrasco_subscribe_inf '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'], + 'recurrent_week': ['1-X', '2-X'], } resp = requests.post(url, json=payload) resp.raise_for_status() @@ -124,7 +145,9 @@ def test_subscribe_with_recurrent_week(conn, create_data, extrasco_subscribe_inf resp.raise_for_status() assert resp.json()['err'] == 0 line = resp.json()['data'][0]['lignes'][0] - assert (line['prixUnit'], line['qte'], line['montant']) == (11.5, 4.0, 46.0) + assert line['prixUnit'] == 11.5 + assert line['qte'] > 0 + assert line['montant'] == line['prixUnit'] * line['qte'] # remove subscription url = conn + '/delete-basket?NameID=%s' % create_data['name_id'] @@ -134,7 +157,6 @@ def test_subscribe_with_recurrent_week(conn, create_data, extrasco_subscribe_inf assert resp.json()['err'] == 0 -@pytest.mark.xfail(run=False) def test_subscribe_with_agenda(conn, create_data, extrasco_subscribe_info): assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True @@ -151,7 +173,23 @@ def test_subscribe_with_agenda(conn, create_data, extrasco_subscribe_info): assert resp.json()['err'] == 0 return resp.json()['data'] - # subscribe witout providing calendar + def get_perisco_bookings(): + url = conn + '/read-child-agenda?NameID=%s' % create_data['name_id'] + params = { + 'child_id': create_data['bart_num'], + '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 [ + item + for item in resp.json()['data'] + if item['details']['activity_id'] == extrasco_subscribe_info['activity']['id'] + ] + + # subscribe without providing calendar url = conn + '/add-person-basket-subscription?NameID=%s' % create_data['name_id'] payload = { 'person_id': create_data['bart_num'], @@ -168,6 +206,7 @@ def test_subscribe_with_agenda(conn, create_data, extrasco_subscribe_info): # no booking assert not any(x['prefill'] for x in get_bookings()) + assert not any(x['prefill'] for x in get_perisco_bookings()) # book using info calendar gabarit (booking registered from w.c.s. form) assert len(extrasco_subscribe_info['info']['agenda']) > 0 @@ -189,6 +228,9 @@ def test_subscribe_with_agenda(conn, create_data, extrasco_subscribe_info): # there is now 2 bookings assert len([x['prefill'] for x in get_bookings() if x['prefill'] is True]) == 2 + perisco_bookings = get_perisco_bookings() + assert len([x['prefill'] for x in perisco_bookings if x['prefill'] is True]) == 2 + assert perisco_bookings[0]['details']['activity_label'] == 'ADL ELEMENTAIRE Maourine Juin' # check quantity into basket url = conn + '/get-baskets?NameID=%s' % create_data['name_id'] diff --git a/functests/toulouse_maelis/test_08_basket.py b/functests/toulouse_maelis/test_08_basket.py index 4f184fcc..a0741035 100644 --- a/functests/toulouse_maelis/test_08_basket.py +++ b/functests/toulouse_maelis/test_08_basket.py @@ -2,8 +2,7 @@ import pytest import requests -@pytest.mark.xfail(run=False) -def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_year): +def test_basket_subscribe_extrasco(conn, create_data, extrasco_subscribe_info, reference_year): assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True def get_baskets(): @@ -66,7 +65,7 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ 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({x['idIns'] for x in data['basket']['lignes']}) == 1 # 3 sur Larden assert len(subscriptions(create_data['bart_num'])) == 1 assert subscriptions(create_data['maggie_num']) == [] @@ -75,12 +74,12 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ 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 data[0]['text'] == 'ENFANCE LOISIRS' + assert len(data[0]['lignes']) == 1 # 3 sur Larden 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 + assert len({x['idIns'] for x in data[0]['lignes']}) == 1 # 3 sur Larden basket_id = data[0]['id'] # cannot subscribe Bart twice @@ -119,7 +118,7 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ # delete (generic) basket line for Bart data = get_baskets() assert len(data) == 1 - assert len(data[0]['lignes']) == 6 + assert len(data[0]['lignes']) == 2 # 6 sur Larden basket_id = data[0]['id'] # line for the generic unit for Bart line_id = [ @@ -140,11 +139,11 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ data = resp.json()['data'] assert data['codeRegie'] == 105 assert len({x['personneInfo']['numPerson'] for x in data['lignes']}) == 1 - assert len({x['idIns'] for x in data['lignes']}) == 3 + assert len({x['idIns'] for x in data['lignes']}) == 1 # 3 sur Larden data = get_baskets() assert len(data) == 1 assert len(get_baskets()) == 1 - assert len(data[0]['lignes']) == 3 + assert len(data[0]['lignes']) == 1 # 3 sur Larden assert subscriptions(create_data['bart_num']) == [] assert len(subscriptions(create_data['maggie_num'])) == 1 @@ -190,22 +189,219 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ assert [x['booked'] for x in resp.json()['changes']] == [True, True] assert len([x['prefill'] for x in get_bookings(create_data['maggie_num']) if x['prefill'] is True]) == 2 - # validate basket - url = conn + '/validate-basket?NameID=%s' % create_data['name_id'] + # 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 - data = resp.json()['data'] - assert len(data['idInsLst']) == 6 - assert len(data['factureLst']) == 0 # No invoice #2187 + assert resp.json()['data'] == 'ok' + assert get_baskets() == [] + assert subscriptions(create_data['bart_num']) == [] + + +def test_basket_subscribe_extrasco2(conn, create_data, extrasco_subscribe_info2, reference_year): + """Subscribing to a generic unit""" + assert extrasco_subscribe_info2['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_info2['activity']['id'], + 'unit_id': extrasco_subscribe_info2['unit']['id'], + 'place_id': extrasco_subscribe_info2['place']['id'], + 'start_date': extrasco_subscribe_info2['unit']['dateStart'][:10], + 'end_date': extrasco_subscribe_info2['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'] + + def get_bookings(person_id): + url = conn + '/read-activity-agenda?NameID=%s' % create_data['name_id'] + params = { + 'person_id': person_id, + 'activity_id': extrasco_subscribe_info2['activity']['id'], + 'start_date': extrasco_subscribe_info2['unit']['dateStart'][:10], + 'end_date': extrasco_subscribe_info2['unit']['dateEnd'][:10], + } + 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() == [] - assert len(subscriptions(create_data['bart_num'])) == 1 - assert len(subscriptions(create_data['maggie_num'])) == 1 + # 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']}) == 1 # 3 expected + + assert len(subscriptions(create_data['bart_num'])) == 2 # redoundant + 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' + assert len(data[0]['lignes']) == 1 # 3 expected + assert len({x['personneInfo']['numPerson'] for x in data[0]['lignes']}) == 1 + + # we should get 3 idIns because we subscribe a generic unit + assert len({x['idIns'] for x in data[0]['lignes']}) == 1 # 3 expected + 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'] + 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'])) == 2 + + # 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'])) == 2 + + # delete (generic) basket line for Bart + data = get_baskets() + assert len(data) == 1 + assert len(data[0]['lignes']) == 2 # 6 sur Larden + basket_id = data[0]['id'] + # line for the generic unit for Bart + 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_info2['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'] == 105 + assert len({x['personneInfo']['numPerson'] for x in data['lignes']}) == 1 + assert len({x['idIns'] for x in data['lignes']}) == 1 # 3 sur Larden + data = get_baskets() + assert len(data) == 1 + assert len(get_baskets()) == 1 + assert len(data[0]['lignes']) == 1 # 3 sur Larden + assert subscriptions(create_data['bart_num']) == [] + assert len(subscriptions(create_data['maggie_num'])) == 2 + + # 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'])) == 2 + + # add bookings to Bart + slots = [x['id'] for x in extrasco_subscribe_info2['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_info2['activity']['id'], + 'start_date': extrasco_subscribe_info2['unit']['dateStart'][:10], + 'end_date': extrasco_subscribe_info2['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] + assert len([x['prefill'] for x in get_bookings(create_data['bart_num']) if x['prefill'] is True]) == 2 + + # 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_info2['activity']['id'], + 'start_date': extrasco_subscribe_info2['unit']['dateStart'][:10], + 'end_date': extrasco_subscribe_info2['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] + assert len([x['prefill'] for x in get_bookings(create_data['maggie_num']) if x['prefill'] is True]) == 2 + + # delete basket + 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']) == [] + assert subscriptions(create_data['maggie_num']) == [] -def test_basket_subscribe_bis(conn, create_data, loisirs_subscribe_info, reference_year): +def test_basket_subscribe_loisirs(conn, create_data, loisirs_subscribe_info, reference_year): assert loisirs_subscribe_info['info']['controlResult']['controlOK'] is True def get_baskets(): diff --git a/functests/toulouse_maelis/test_09_invoice.py b/functests/toulouse_maelis/test_09_invoice.py index e2c8e948..c5daeae4 100644 --- a/functests/toulouse_maelis/test_09_invoice.py +++ b/functests/toulouse_maelis/test_09_invoice.py @@ -39,7 +39,7 @@ def test_direct_debit_order(conn, create_data): assert diff(res['data'], 'test_get_rl1_direct_debit_order.json') -def test_pay_invoice(conn, create_data, loisirs_subscribe_info, reference_year): +def test_pay_invoice_loisirs(conn, create_data, loisirs_subscribe_info, reference_year): assert loisirs_subscribe_info['info']['controlResult']['controlOK'] is True def get_baskets(): @@ -158,3 +158,191 @@ def test_pay_invoice(conn, create_data, loisirs_subscribe_info, reference_year): assert len({x['idIns'] for x in data[0]['maelis_item']['lineInvoiceList']}) == 2 assert data[0]['maelis_item']['idInvoice'] == invoice_id assert data[0]['maelis_item']['numInvoice'] == invoice_num + + +def test_payinvoice_extrasco(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'] + + def get_bookings(person_id): + url = conn + '/read-activity-agenda?NameID=%s' % create_data['name_id'] + params = { + 'person_id': person_id, + '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'] + + # 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']}) == 1 + + 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 len(data[0]['lignes']) == 1 + assert len({x['personneInfo']['numPerson'] for x in data[0]['lignes']}) == 1 + + assert len({x['idIns'] for x in data[0]['lignes']}) == 1 + basket_id = data[0]['id'] + + # 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 + + # 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] + assert len([x['prefill'] for x in get_bookings(create_data['bart_num']) if x['prefill'] is True]) == 2 + + # 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] + assert len([x['prefill'] for x in get_bookings(create_data['maggie_num']) if x['prefill'] is True]) == 2 + + # 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']) == 2 + assert len(data['factureLst']) == 1 + assert get_baskets() == [] + assert len(data['factureLst'][0]['lineInvoiceList']) == 2 + assert data['factureLst'][0]['regie']['code'] == 105 + invoice_num = data['factureLst'][0]['numInvoice'] + invoice_id = data['factureLst'][0]['idInvoice'] + + # get invoices paid + url = conn + '/regie/105/invoices/history?NameID=%s' % create_data['name_id'] + resp = requests.get(url) + resp.raise_for_status() + assert resp.json() == {'data': [], 'err': 0} + + # get invoices to be paid + url = conn + '/regie/105/invoices?NameID=%s' % create_data['name_id'] + resp = requests.get(url) + resp.raise_for_status() + assert resp.json()['err'] == 0 + data = resp.json()['data'] + assert len(data) == 1 + assert data[0]['amount'] == '46' # ou juste > 0 ? + assert data[0]['online_payment'] is True + assert data[0]['paid'] is False + assert len({x['idIns'] for x in data[0]['maelis_item']['lineInvoiceList']}) == 2 + assert data[0]['maelis_item']['idInvoice'] == invoice_id + assert data[0]['maelis_item']['numInvoice'] == invoice_num + + # payInvoice + url = conn + '/regie/105/invoice/%s-%s/pay/' % (create_data['family_id'], invoice_num) + payload = { + 'transaction_date': datetime.datetime.now().strftime('%Y-%m-%dT%H:%M:%S'), + 'transaction_id': 'xxx', + } + resp = requests.post(url, json=payload) + resp.raise_for_status() + res = resp.json() + assert res['data'] == 'ok' + + # get invoices to be paid + url = conn + '/regie/105/invoices?NameID=%s' % create_data['name_id'] + resp = requests.get(url) + resp.raise_for_status() + assert resp.json() == {'has_invoice_for_payment': True, 'data': [], 'err': 0} + + # get invoices history + url = conn + '/regie/105/invoices/history?NameID=%s' % create_data['name_id'] + resp = requests.get(url) + resp.raise_for_status() + assert resp.json()['err'] == 0 + data = resp.json()['data'] + assert len(data) == 1 + assert data[0]['amount'] == '0' + assert data[0]['total_amount'] == '46' # ou juste > 0 ? + assert data[0]['online_payment'] is False + assert data[0]['paid'] is True + assert len({x['idIns'] for x in data[0]['maelis_item']['lineInvoiceList']}) == 2 + assert data[0]['maelis_item']['idInvoice'] == invoice_id + assert data[0]['maelis_item']['numInvoice'] == invoice_num