From 050037180b303dfdad91770755934b7a539a588e Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Thu, 4 Jun 2020 14:29:37 +0200 Subject: [PATCH 3/3] lingo: pass extra item info to eopayment backend (#42992) --- combo/apps/lingo/views.py | 12 +++++++- tests/test_lingo_payment.py | 56 ++++++++++++++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index 8b2c7cb8..ae7bd24d 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -182,7 +182,7 @@ class AddBasketItemApiView(View): user = get_user_from_name_id(request.GET.get('NameId'), raise_on_missing=True) else: user = None - item.email = request_body.get('email_address') or '' + item.email = request_body.get('email') or '' except User.DoesNotExist: return BadRequestJsonResponse('unknown user') @@ -398,6 +398,16 @@ class PayMixin(object): kwargs = { 'email': email, 'first_name': firstname, 'last_name': lastname } + kwargs['merchant_name'] = settings.TEMPLATE_VARS.get('global_title') or 'Compte Citoyen' + kwargs['items_info'] = [] + for item in remote_items or items: + kwargs['items_info'].append({ + 'text': item.subject, + 'amount': item.amount, + 'reference_id': item.reference_id, + }) + if not email and item.email: + kwargs['email'] = item.email if items: capture_date = items[0].capture_date if capture_date: diff --git a/tests/test_lingo_payment.py b/tests/test_lingo_payment.py index 375983c8..df300b52 100644 --- a/tests/test_lingo_payment.py +++ b/tests/test_lingo_payment.py @@ -392,9 +392,63 @@ def test_basket_item_with_capture_date(app, user, user_name_id, regie, basket_pa location = urlparse.urlparse(resp.location) assert location.path == '/' assert location.hostname == 'dummy-payment.demo.entrouvert.com' + + items_info = [{'text': 'test item', 'amount': Decimal('10.00'), 'reference_id': ''}] eopayment_mock.assert_called_once_with( Decimal(10), email=user.email, first_name=user.first_name, last_name=user.last_name, - capture_date=capture_date) + capture_date=capture_date, merchant_name='Compte Citoyen', items_info=items_info + ) + + +def test_basket_items_extra_info(app, user, user_name_id, regie, basket_page, monkeypatch): + url = '%s?NameId=%s' % (reverse('api-add-basket-item'), user_name_id) + items_info = [{'text': 'face mask', 'amount': Decimal(10), 'reference_id': '1'}, + {'text': 'face mask 2', 'amount': Decimal(15), 'reference_id': '2'}] + items_post_data = [{'display_name': 'face mask', 'amount': 10, 'reference_id': 1}, + {'display_name': 'face mask 2', 'amount': 15, 'reference_id': 2}] + global_title = 'FooBar' + + url = sign_url(url, settings.LINGO_API_SIGN_KEY) + for item in items_post_data: + resp = app.post_json(url, params=item) + assert resp.status_code == 200 + + resp = login(app).get('/test_basket_cell/') + import eopayment + eopayment_mock = mock.Mock( + return_value=('orderid', eopayment.URL, 'http://dummy-payment.demo.entrouvert.com/')) + monkeypatch.setattr(eopayment.Payment, 'request', eopayment_mock) + with override_settings(TEMPLATE_VARS={'global_title': global_title}): + resp = resp.form.submit() + eopayment_mock.assert_called_once_with( + Decimal(25), email=user.email, first_name=user.first_name, last_name=user.last_name, + merchant_name=global_title, items_info=items_info + ) + + +def test_basket_items_extra_info_no_basket(app, regie, basket_page, monkeypatch): + # when no user is authenticated, it is still possible to pass an email to eopayment backend + url = reverse('api-add-basket-item') + email = 'test@entrouvert.com' + items_info = [{'text': 'face mask', 'amount': Decimal(10), 'reference_id': ''}] + item = {'display_name': 'face mask', 'amount': 10, 'email': email} + + url = sign_url(url, settings.LINGO_API_SIGN_KEY) + resp = app.post_json(url, params=item) + assert resp.status_code == 200 + item = BasketItem.objects.first() + assert item.user is None + + payment_url = resp.json['payment_url'] + import eopayment + eopayment_mock = mock.Mock( + return_value=('orderid', eopayment.URL, 'http://dummy-payment.demo.entrouvert.com/')) + monkeypatch.setattr(eopayment.Payment, 'request', eopayment_mock) + resp = app.get(payment_url) + eopayment_mock.assert_called_once_with( + Decimal(10), email=email, first_name='', last_name='', items_info=items_info, + merchant_name='Compte Citoyen' + ) @pytest.mark.parametrize("invalid_capture_date", [8, '', 'not-a-date']) -- 2.20.1