From 6be077b13b30eba5eb1b8a2ccd0b487721a16862 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 10 Oct 2020 09:02:07 +0200 Subject: [PATCH 4/4] lingo: pass PayFip specific data to eopayment for unique item payment (#47506) --- combo/apps/lingo/views.py | 6 ++++++ tests/test_lingo_payment.py | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index e9ae0d34..29bb747e 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -439,6 +439,12 @@ class PayMixin(object): if item.reference_id: kwargs['orderid'] = item.reference_id + # PayFiP/TIPI specific + if regie.payment_backend.service in ('payfip_ws', 'tipi'): + if item.request_data and item.request_data.get('exer') and item.request_data.get('refdet'): + kwargs['exer'] = item.request_data['exer'] + kwargs['refdet'] = item.request_data['refdet'] + # allow easy testing/use of backend specific keyword arguments EOPAYMENT_REQUEST_KWARGS_PREFIX = 'eopayment_request_kwargs_' if hasattr(item, 'request_data'): diff --git a/tests/test_lingo_payment.py b/tests/test_lingo_payment.py index 172aae3f..5272d453 100644 --- a/tests/test_lingo_payment.py +++ b/tests/test_lingo_payment.py @@ -1606,3 +1606,30 @@ def test_failure_can_only_pay_one_basket_item(get_items_to_be_paid, app, mono_re assert 'Grouping basket items is not allowed.' in app.session['_messages'] assert len(caplog.records) == 1 assert 'regie can only pay one basket item' in caplog.records[0].message + + +def test_tipi_kwargs_can_pay_only_one_basket_item(app, basket_page, mono_regie, user): + item = BasketItem.objects.create(user=user, regie=mono_regie, amount=42, subject='foo item', + request_data={'refdet': 'F20201030', 'exer': '2020'}) + resp = login(app).get(item.payment_url) + # with dummy refdet/exer are ignored + assert '2020' not in resp.location + + mono_regie.payment_backend.service = 'tipi' + mono_regie.payment_backend.save() + + resp = login(app).get(item.payment_url) + qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query) + assert qs['refdet'][0] == 'F20201030' + assert qs['exer'][0] == '2020' + + +@mock.patch('eopayment.payfip_ws.Payment.request', return_value=(1, eopayment.URL, 'https://payfip/')) +def test_payfip_ws_kwargs_can_pay_only_one_basket_item(payment_request, app, basket_page, mono_regie, user): + mono_regie.payment_backend.service = 'payfip_ws' + mono_regie.payment_backend.save() + + resp = login(app).get(item.payment_url) + assert resp.location == 'https://payfip/' + assert payment_request.call_args[1]['refdet'] == 'F20201030' + assert payment_request.call_args[1]['exer'] == '2020' -- 2.28.0