From acd0ba843c707e461253436ce70366988f079d4d Mon Sep 17 00:00:00 2001 From: Nicolas ROCHE Date: Mon, 17 Apr 2023 17:47:21 +0200 Subject: [PATCH] toulouse-maelis: [functests] add test to pay an invoice (#76726) --- functests/toulouse_maelis/conftest.py | 18 +++ .../data/test_read_regie_list.json | 56 +++++++ functests/toulouse_maelis/test_00_data.py | 1 + functests/toulouse_maelis/test_04_loisirs.py | 148 +++++++++++++++++- functests/toulouse_maelis/test_05_extrasco.py | 8 +- functests/toulouse_maelis/test_06_basket.py | 138 +++++++++++++++- functests/toulouse_maelis/test_07_invoice.py | 96 +++++++++--- 7 files changed, 434 insertions(+), 31 deletions(-) create mode 100644 functests/toulouse_maelis/data/test_read_regie_list.json diff --git a/functests/toulouse_maelis/conftest.py b/functests/toulouse_maelis/conftest.py index c86db293..2caf7759 100644 --- a/functests/toulouse_maelis/conftest.py +++ b/functests/toulouse_maelis/conftest.py @@ -616,6 +616,24 @@ def get_subscription_info(nature, activity_text, unit_text, place_text, con, nam } +@pytest.fixture(scope='session') +def loisirs_subscribe_info(conn, create_data, reference_year): + unlink(conn, create_data['name_id']) + link(conn, create_data) + + return get_subscription_info( + 'LOISIRS', + # Sigec made this loisirs activity available for functests + 'TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES', + 'MERCREDI - 15h30/17h - 8/15Ans', + 'ARGOULETS', + conn, + create_data['name_id'], + create_data['bart_num'], + reference_year, + ) + + @pytest.fixture(scope='session') def extrasco_subscribe_info(conn, create_data, reference_year): unlink(conn, create_data['name_id']) diff --git a/functests/toulouse_maelis/data/test_read_regie_list.json b/functests/toulouse_maelis/data/test_read_regie_list.json new file mode 100644 index 00000000..92e3eb46 --- /dev/null +++ b/functests/toulouse_maelis/data/test_read_regie_list.json @@ -0,0 +1,56 @@ +[ + { + "id": 102, + "code": 102, + "text": "CANTINE / CLAE", + "libelle": "CANTINE / CLAE" + }, + { + "id": 103, + "code": 103, + "text": "CCAS", + "libelle": "CCAS" + }, + { + "id": 101, + "code": 101, + "text": "DASC", + "libelle": "DASC" + }, + { + "id": 104, + "code": 104, + "text": "DSCS", + "libelle": "DSCS" + }, + { + "id": 105, + "code": 105, + "text": "ENFANCE LOISIRS", + "libelle": "ENFANCE LOISIRS" + }, + { + "id": 106, + "code": 106, + "text": "PARCOURS EDUCATIFS", + "libelle": "PARCOURS EDUCATIFS" + }, + { + "id": 107, + "code": 107, + "text": "REMBOURSEMENT", + "libelle": "REMBOURSEMENT" + }, + { + "id": 108, + "code": 108, + "text": "SENIORS", + "libelle": "SENIORS" + }, + { + "id": 109, + "code": 109, + "text": "SPORT", + "libelle": "SPORT" + } +] diff --git a/functests/toulouse_maelis/test_00_data.py b/functests/toulouse_maelis/test_00_data.py index 9a836563..75ef1e49 100644 --- a/functests/toulouse_maelis/test_00_data.py +++ b/functests/toulouse_maelis/test_00_data.py @@ -19,6 +19,7 @@ from .conftest import diff 'pai', 'quality', 'quotient', + 'regie', 'rl-indicator', 'situation', 'street', diff --git a/functests/toulouse_maelis/test_04_loisirs.py b/functests/toulouse_maelis/test_04_loisirs.py index 47acfe73..bbbbf8b3 100644 --- a/functests/toulouse_maelis/test_04_loisirs.py +++ b/functests/toulouse_maelis/test_04_loisirs.py @@ -1,10 +1,13 @@ import datetime +import pytest import requests from .conftest import link, unlink -# LOISIR is a subset of EXTRACO, we only test the genaral catalog cell here +# LOISIR is like EXTRACO (most tests are redondants) but : +# * there is no calendar (days) to provide. +# * there is a general catalog to display def test_catalog_general_loisirs(conn, update_data): @@ -16,9 +19,144 @@ def test_catalog_general_loisirs(conn, update_data): resp = requests.get(url, params=params) resp.raise_for_status() assert resp.json()['err'] == 0 + labels = [x['text'] for x in resp.json()['data']] + assert ( + 'TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES, MERCREDI - 13h45/17h - 8/15Ans, ARGOULETS' + in labels + ) + assert ( + 'TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES, MERCREDI - 14h/16h30 - 10/15Ans, LA RAMEE' + in labels + ) + assert ( + 'TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES, MERCREDI - 15h30/17h - 8/15Ans, ARGOULETS' + in labels + ) + assert 'TEST Promenade forêt enchantée, TEST Promenade forêt enchantée, TERRITOIRE OUEST' in labels + assert ( + 'TEST Promenade lac de plaisance du T., TEST Promenade lac de plaisance du T., TERRITOIRE OUEST' + in labels + ) - [x['text'] for x in resp.json()['data']] == [ - 'TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES, MERCREDI - 13h45/17h - 8/15Ans, ARGOULETS', - 'TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES, MERCREDI - 14h/16h30 - 10/15Ans, LA RAMEE', - 'TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES, MERCREDI - 15h30/17h - 8/15Ans, ARGOULETS', + +def test_catalog_personnalise_loisirs(loisirs_subscribe_info): + assert ( + loisirs_subscribe_info['info']['activity']['libelle1'] + == 'TEST ECOLE DES SPORTS 22/23 SEMESTRE 2 - MULTIACTIVITES' + ) + assert loisirs_subscribe_info['info']['calendarGeneration']['code'] == 'FORBIDDEN' + assert loisirs_subscribe_info['info']['billingInformation'] == { + 'modeFact': 'FORFAIT', + 'quantity': 1.0, + 'unitPrice': 150.0, + } + + +def test_direct_subscribe(conn, create_data, loisirs_subscribe_info, reference_year): + assert loisirs_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': loisirs_subscribe_info['activity']['id'], + 'unit_id': loisirs_subscribe_info['unit']['id'], + 'place_id': loisirs_subscribe_info['place']['id'], + 'start_date': '%s-09-01' % reference_year, + 'end_date': '%s-08-31' % (reference_year + 1), + } + 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} + + +@pytest.mark.xfail(run=False) +def test_subscribe_with_conveyance(conn, create_data, loisirs_subscribe_info, reference_year): + assert loisirs_subscribe_info['info']['controlResult']['controlOK'] is True + + assert loisirs_subscribe_info['info']['conveyance'] is not None + morning = [ + x['id'] for x in loisirs_subscribe_info['info']['conveyance']['morningJourney']['depositPlaceList'] ] + afternoon = [ + x['id'] for x in loisirs_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': loisirs_subscribe_info['activity']['id'], + 'unit_id': loisirs_subscribe_info['unit']['id'], + 'place_id': loisirs_subscribe_info['place']['id'], + 'start_date': '%s-09-01' % reference_year, + 'end_date': '%s-08-31' % (reference_year + 1), + '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 + + +@pytest.mark.xfail(run=False) +def test_subscribe_with_recurrent_week(conn, create_data, loisirs_subscribe_info, reference_year): + assert loisirs_subscribe_info['info']['controlResult']['controlOK'] is True + assert [(x['id'], x['day']) for x in loisirs_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': loisirs_subscribe_info['activity']['id'], + 'unit_id': loisirs_subscribe_info['unit']['id'], + 'place_id': loisirs_subscribe_info['place']['id'], + 'start_date': '%s-09-01' % reference_year, + 'end_date': '%s-08-31' % (reference_year + 1), + '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': loisirs_subscribe_info['activity']['id'], + 'start_date': '%s-09-01' % reference_year, + 'end_date': '%s-08-31' % (reference_year + 1), + } + 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 diff --git a/functests/toulouse_maelis/test_05_extrasco.py b/functests/toulouse_maelis/test_05_extrasco.py index 29eb996c..77205e82 100644 --- a/functests/toulouse_maelis/test_05_extrasco.py +++ b/functests/toulouse_maelis/test_05_extrasco.py @@ -1,6 +1,8 @@ +import pytest import requests +@pytest.mark.xfail(run=False) 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' @@ -11,6 +13,7 @@ def test_catalog_personnalise_extrasco(extrasco_subscribe_info): } +@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 @@ -31,6 +34,7 @@ def test_direct_subscribe(conn, create_data, extrasco_subscribe_info, reference_ assert resp.json()['data'] == {'controlOK': True, 'message': None} +@pytest.mark.xfail(run=False) def test_subscribe_with_conveyance(conn, create_data, extrasco_subscribe_info): assert extrasco_subscribe_info['info']['controlResult']['controlOK'] is True @@ -68,6 +72,7 @@ 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']] == [ @@ -119,6 +124,7 @@ 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 @@ -135,7 +141,7 @@ def test_subscribe_with_agenda(conn, create_data, extrasco_subscribe_info): assert resp.json()['err'] == 0 return resp.json()['data'] - # subscribe witout providing calandar + # subscribe witout providing calendar url = conn + '/add-person-basket-subscription?NameID=%s' % create_data['name_id'] payload = { 'person_id': create_data['bart_num'], diff --git a/functests/toulouse_maelis/test_06_basket.py b/functests/toulouse_maelis/test_06_basket.py index 1d35f9c7..e00a0bd9 100644 --- a/functests/toulouse_maelis/test_06_basket.py +++ b/functests/toulouse_maelis/test_06_basket.py @@ -1,6 +1,8 @@ +import pytest import requests +@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 @@ -119,7 +121,7 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ assert len(data) == 1 assert len(data[0]['lignes']) == 6 basket_id = data[0]['id'] - # idIns for the generic unit + # line for the generic unit for Bart line_id = [ y['id'] for x in data @@ -202,4 +204,136 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ assert len(subscriptions(create_data['bart_num'])) == 1 assert len(subscriptions(create_data['maggie_num'])) == 1 - # call cancelInvoiceAndDeleteSubscribeList de remove subscriptions + +def test_basket_subscribe_bis(conn, create_data, loisirs_subscribe_info, reference_year): + assert loisirs_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': loisirs_subscribe_info['activity']['id'], + 'unit_id': loisirs_subscribe_info['unit']['id'], + 'place_id': loisirs_subscribe_info['place']['id'], + 'start_date': '%s-09-01' % reference_year, + 'end_date': '%s-08-31' % (reference_year + 1), + } + 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': 'LOISIRS', + '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': loisirs_subscribe_info['activity']['id'], + 'start_date': '%s-09-01' % reference_year, + 'end_date': '%s-08-31' % (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'] == 109 + 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'])) == 2 # 1 expected + # assert subscriptions(create_data['maggie_num']) == [] + + # basket + data = get_baskets() + assert len(data) == 1 + assert data[0]['codeRegie'] == 109 + assert data[0]['text'] == 'SPORT' + 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'] + + # 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 + + # 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 # 1 expected + + # delete basket line for Bart + data = get_baskets() + assert len(data) == 1 + assert len(data[0]['lignes']) == 2 + basket_id = data[0]['id'] + # line for Bart + line_id = [ + y['id'] + for x in data + for y in x['lignes'] + if y['personneInfo']['numPerson'] == int(create_data['bart_num']) + ][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'] == 109 + assert len({x['personneInfo']['numPerson'] for x in data['lignes']}) == 1 + assert len({x['idIns'] for x in data['lignes']}) == 1 + data = get_baskets() + assert len(data) == 1 + assert len(get_baskets()) == 1 + assert len(data[0]['lignes']) == 1 + # assert len(subscriptions(create_data['bart_num'])) == 1 # 0 expected + # assert len(subscriptions(create_data['maggie_num'])) == 2 # 1 expected + + # 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 len(subscriptions(create_data['bart_num'])) == 1 # 0 expected diff --git a/functests/toulouse_maelis/test_07_invoice.py b/functests/toulouse_maelis/test_07_invoice.py index 3fafb467..19d18681 100644 --- a/functests/toulouse_maelis/test_07_invoice.py +++ b/functests/toulouse_maelis/test_07_invoice.py @@ -1,4 +1,5 @@ -import pytest +import datetime + import requests from .conftest import diff, link, unlink @@ -37,9 +38,8 @@ def test_direct_debit_order(conn, create_data): 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 test_pay_invoice(conn, create_data, loisirs_subscribe_info, reference_year): + assert loisirs_subscribe_info['info']['controlResult']['controlOK'] is True def get_baskets(): url = conn + '/get-baskets?NameID=%s' % create_data['name_id'] @@ -52,11 +52,11 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ 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], + 'activity_id': loisirs_subscribe_info['activity']['id'], + 'unit_id': loisirs_subscribe_info['unit']['id'], + 'place_id': loisirs_subscribe_info['place']['id'], + 'start_date': '%s-09-01' % reference_year, + 'end_date': '%s-08-31' % (reference_year + 1), } resp = requests.post(url, json=payload) resp.raise_for_status() @@ -70,9 +70,9 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ assert resp.json()['err'] == 0 data = resp.json()['data'] assert data['controlResult'] == {'controlOK': True, 'message': None} - assert data['basket']['codeRegie'] == 105 + assert data['basket']['codeRegie'] == 109 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 # subscribe Maggie resp = subscribe(create_data['maggie_num']) @@ -84,26 +84,76 @@ def test_basket_subscribe(conn, create_data, extrasco_subscribe_info, reference_ # 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 + assert data[0]['codeRegie'] == 109 + assert data[0]['text'] == 'SPORT' + assert len(data[0]['lignes']) == 2 + assert len({x['personneInfo']['numPerson'] for x in data[0]['lignes']}) == 2 + assert len({x['idIns'] for x in data[0]['lignes']}) == 2 basket_id = data[0]['id'] - # validate basket + # validate basket de generate an invoice 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 len(data['idInsLst']) == 2 + assert len(data['factureLst']) == 1 + assert len(data['factureLst'][0]['lineInvoiceList']) == 2 + assert data['factureLst'][0]['regie']['code'] == 109 + invoice_num = data['factureLst'][0]['numInvoice'] + invoice_id = data['factureLst'][0]['idInvoice'] assert get_baskets() == [] - # to continue : - # cancelInvoiceAndDeleteSubscribeList + # get invoices paid + url = conn + '/regie/109/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/109/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'] == '300' + 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/109/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/109/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 paid + url = conn + '/regie/109/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'] == '300' + 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