From 2bfb96ea951e5bce045771cd8211c9e811fcf944 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 | 15 ++++++++++----- .../templates/lingo/paymentbackend_form.html | 4 +++- combo/apps/lingo/templates/lingo/regie_form.html | 4 +++- tests/test_lingo_manager.py | 9 +++++++++ 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/combo/apps/lingo/manager_views.py b/combo/apps/lingo/manager_views.py index b194b18c..f6271290 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.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.callback_url) + return ctx + class PaymentBackendDeleteView(DeleteView): model = PaymentBackend diff --git a/combo/apps/lingo/models.py b/combo/apps/lingo/models.py index f703ada8..d8e319f6 100644 --- a/combo/apps/lingo/models.py +++ b/combo/apps/lingo/models.py @@ -172,16 +172,13 @@ class PaymentBackend(models.Model): options = {} if request: if not automatic_return_url: - automatic_return_url = reverse( - 'lingo-callback-payment-backend', kwargs={'payment_backend_pk': self.id} - ) - + automatic_return_url = self.callback_url if automatic_return_url: automatic_return_url = request.build_absolute_uri(automatic_return_url) if normal_return_url: normal_return_url = request.build_absolute_uri(normal_return_url) + options['normal_return_url'] = normal_return_url options['automatic_return_url'] = automatic_return_url - options['normal_return_url'] = normal_return_url else: assert ( not automatic_return_url and not normal_return_url @@ -280,6 +277,10 @@ class PaymentBackend(models.Model): last_pk = transaction.pk transaction.poll_backend(ignore_errors=False) + @property + def callback_url(self): + return reverse('lingo-callback-payment-backend', kwargs={'payment_backend_pk': self.pk}) + @python_2_unicode_compatible class Regie(models.Model): @@ -606,6 +607,10 @@ class Regie(models.Model): def make_eopayment(self, **kwargs): return self.payment_backend.make_eopayment(**kwargs) + @property + def callback_url(self): + return self.payment_backend.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..e4491d5e 100644 --- a/combo/apps/lingo/templates/lingo/paymentbackend_form.html +++ b/combo/apps/lingo/templates/lingo/paymentbackend_form.html @@ -10,8 +10,10 @@ {% endblock %} {% block content %} -
+ {% if object.id and 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..0555656d 100644 --- a/combo/apps/lingo/templates/lingo/regie_form.html +++ b/combo/apps/lingo/templates/lingo/regie_form.html @@ -10,8 +10,10 @@ {% endblock %} {% block content %} - + {% if object.id and callback_url %} +

{{ callback_url }}

+ {% endif %} {% csrf_token %} {{ form.as_p }}
diff --git a/tests/test_lingo_manager.py b/tests/test_lingo_manager.py index f5621ea3..e9f36518 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