From e7a4dc8f6c7ac1c3f77eb66cf8311b0663613ab5 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 5 Dec 2020 08:17:04 +0100 Subject: [PATCH 1/3] lingo: show backend callback URL in update views (#49145) --- combo/apps/lingo/manager_views.py | 10 ++++++++++ combo/apps/lingo/models.py | 6 ++++++ .../lingo/templates/lingo/paymentbackend_form.html | 4 ++++ combo/apps/lingo/templates/lingo/regie_form.html | 4 ++++ combo/apps/lingo/views.py | 10 ++-------- tests/test_lingo_manager.py | 9 +++++++++ 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/combo/apps/lingo/manager_views.py b/combo/apps/lingo/manager_views.py index b194b18c..c4700170 100644 --- a/combo/apps/lingo/manager_views.py +++ b/combo/apps/lingo/manager_views.py @@ -50,6 +50,11 @@ class RegieUpdateView(UpdateView): form_class = RegieForm success_url = reverse_lazy('lingo-manager-regie-list') + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['callback_url'] = self.request.build_absolute_uri(self.object.get_callback_url()) + return ctx + class RegieDeleteView(DeleteView): model = Regie @@ -74,6 +79,11 @@ class PaymentBackendUpdateView(UpdateView): form_class = PaymentBackendForm success_url = reverse_lazy('lingo-manager-paymentbackend-list') + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['callback_url'] = self.request.build_absolute_uri(self.object.get_callback_url()) + return ctx + class PaymentBackendDeleteView(DeleteView): model = PaymentBackend diff --git a/combo/apps/lingo/models.py b/combo/apps/lingo/models.py index 1f3b4a81..1a101a4c 100644 --- a/combo/apps/lingo/models.py +++ b/combo/apps/lingo/models.py @@ -170,6 +170,9 @@ class PaymentBackend(models.Model): backend = next(serializers.deserialize('json', json.dumps([json_backend]), ignorenonexistent=True)) backend.save() + def get_callback_url(self): + return reverse('lingo-callback-payment-backend', kwargs={'payment_backend_pk': self.pk}) + @python_2_unicode_compatible class Regie(models.Model): @@ -487,6 +490,9 @@ class Regie(models.Model): regie = next(serializers.deserialize('json', json.dumps([json_regie]), ignorenonexistent=True)) regie.save() + def get_callback_url(self): + return self.payment_backend.get_callback_url() + class BasketItem(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True) diff --git a/combo/apps/lingo/templates/lingo/paymentbackend_form.html b/combo/apps/lingo/templates/lingo/paymentbackend_form.html index 41ea23c4..e59e16fc 100644 --- a/combo/apps/lingo/templates/lingo/paymentbackend_form.html +++ b/combo/apps/lingo/templates/lingo/paymentbackend_form.html @@ -11,6 +11,10 @@ {% block content %} +{% if object.id and callback_url %} +

{% trans "Callback URL:" %} {{ callback_url }}

+{% endif %} +
{% csrf_token %} {{ form.as_p }} diff --git a/combo/apps/lingo/templates/lingo/regie_form.html b/combo/apps/lingo/templates/lingo/regie_form.html index 5d4442b4..527283fc 100644 --- a/combo/apps/lingo/templates/lingo/regie_form.html +++ b/combo/apps/lingo/templates/lingo/regie_form.html @@ -11,6 +11,10 @@ {% block content %} +{% if object.id and callback_url %} +

{% trans "Callback URL:" %} {{ callback_url }}

+{% endif %} + {% csrf_token %} {{ form.as_p }} diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index b2b12033..6e12fac2 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -80,14 +80,8 @@ def get_eopayment_object(request, regie_or_payment_backend, transaction_id=None) payment_backend = regie_or_payment_backend if isinstance(regie_or_payment_backend, Regie): payment_backend = regie_or_payment_backend.payment_backend - options = payment_backend.service_options - options.update( - { - 'automatic_return_url': request.build_absolute_uri( - reverse('lingo-callback-payment-backend', kwargs={'payment_backend_pk': payment_backend.id}) - ), - } - ) + options = payment_backend.service_options.copy() + options['automatic_return_url'] = request.build_absolute_uri(payment_backend.get_callback_url()) if transaction_id: options['normal_return_url'] = request.build_absolute_uri( diff --git a/tests/test_lingo_manager.py b/tests/test_lingo_manager.py index b4f1939d..d3516d8e 100644 --- a/tests/test_lingo_manager.py +++ b/tests/test_lingo_manager.py @@ -69,6 +69,11 @@ def test_edit_regie(app, admin_user, payment_backend): resp = app.get('/manage/lingo/regies/', status=200) resp = resp.click('Test') assert '/manage/lingo/regies/' in resp.text + + # callback URL is shown + assert 'Callback URL' in resp + assert 'http://testserver/lingo/callback-payment-backend/%s/' % payment_backend.pk in resp + resp.forms[0]['description'] = 'other description' resp = resp.forms[0].submit() assert resp.location.endswith('/manage/lingo/regies/') @@ -632,6 +637,10 @@ def test_edit_payment_backend(app, admin_user): resp = app.get('/manage/lingo/paymentbackends/%s/edit' % payment_backend.pk, status=200) assert '/manage/lingo/paymentbackends/' in resp.text + # callback URL is shown + assert 'Callback URL' in resp + assert 'http://testserver/lingo/callback-payment-backend/%s' % payment_backend.pk in resp + # service cannot be changed assert 'disabled' in resp.form['service'].attrs -- 2.31.1