Projet

Général

Profil

0004-lingo-make-manager-views-compliant-with-PaymentBacke.patch

Emmanuel Cazenave, 13 mai 2019 17:45

Télécharger (16,7 ko)

Voir les différences:

Subject: [PATCH 4/4] lingo: make manager views compliant with PaymentBackend
 (#32441)

 combo/apps/lingo/manager_views.py             | 23 ++++-
 .../lingo/paymentbackend_confirm_delete.html  | 17 ++++
 .../templates/lingo/paymentbackend_form.html  | 22 +++++
 .../templates/lingo/paymentbackend_list.html  | 38 +++++++++
 .../templates/lingo/transaction_list.html     |  1 +
 combo/apps/lingo/urls.py                      | 12 ++-
 tests/test_lingo_cells.py                     |  8 +-
 tests/test_lingo_manager.py                   | 85 ++++++++++++++++---
 tests/test_notification.py                    |  9 +-
 9 files changed, 196 insertions(+), 19 deletions(-)
 create mode 100644 combo/apps/lingo/templates/lingo/paymentbackend_confirm_delete.html
 create mode 100644 combo/apps/lingo/templates/lingo/paymentbackend_form.html
 create mode 100644 combo/apps/lingo/templates/lingo/paymentbackend_list.html
combo/apps/lingo/manager_views.py
27 27

  
28 28
import eopayment
29 29

  
30
from .models import Regie, Transaction
30
from .models import PaymentBackend, Regie, Transaction
31 31

  
32 32
class RegieListView(ListView):
33 33
    model = Regie
......
55 55
    success_url = reverse_lazy('lingo-manager-regie-list')
56 56

  
57 57

  
58
class PaymentBackendListView(ListView):
59
    model = PaymentBackend
60

  
61

  
62
class PaymentBackendCreateView(CreateView):
63
    model = PaymentBackend
64
    fields = '__all__'
65
    success_url = reverse_lazy('lingo-manager-paymentbackend-list')
66

  
67

  
68
class PaymentBackendUpdateView(UpdateView):
69
    model = PaymentBackend
70
    fields = '__all__'
71
    success_url = reverse_lazy('lingo-manager-paymentbackend-list')
72

  
73

  
74
class PaymentBackendDeleteView(DeleteView):
75
    model = PaymentBackend
76
    success_url = reverse_lazy('lingo-manager-paymentbackend-list')
77

  
78

  
58 79
class TransactionListView(ListView):
59 80
    model = Transaction
60 81
    paginate_by = 10
combo/apps/lingo/templates/lingo/paymentbackend_confirm_delete.html
1
{% extends "combo/manager_base.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{{ view.model.get_verbose_name }}</h2>
6
{% endblock %}
7

  
8
{% block content %}
9
<form method="post">
10
  {% csrf_token %}
11
  {% blocktrans %}Are you sure you want to delete this ?{% endblocktrans %}
12
  <div class="buttons">
13
    <button class="delete-button">{% trans 'Delete' %}</button>
14
    <a class="cancel" href="{% url 'lingo-manager-paymentbackend-list' %}">{% trans 'Cancel' %}</a>
15
  </div>
16
</form>
17
{% endblock %}
combo/apps/lingo/templates/lingo/paymentbackend_form.html
1
{% extends "lingo/paymentbackend_list.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
{% if object.id %}
6
<h2>{% trans "Edit Payment backend" %}</h2>
7
{% else %}
8
<h2>{% trans "New Payment backend" %}</h2>
9
{% endif %}
10
{% endblock %}
11

  
12
{% block content %}
13

  
14
<form method="post" enctype="multipart/form-data">
15
  {% csrf_token %}
16
  {{ form.as_p }}
17
  <div class="buttons">
18
    <button class="submit-button">{% trans "Save" %}</button>
19
    <a class="cancel" href="{% url 'lingo-manager-homepage' %}">{% trans 'Cancel' %}</a>
20
  </div>
21
</form>
22
{% endblock %}
combo/apps/lingo/templates/lingo/paymentbackend_list.html
1
{% extends "lingo/manager_base.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{% trans 'Payment backends' %}</h2>
6
<span class="actions">
7
<a rel="popup" href="{% url 'lingo-manager-paymentbackend-add' %}">{% trans 'New' %}</a>
8
</span>
9
{% endblock %}
10

  
11
{% block breadcrumb %}
12
{{ block.super }}
13
<a href="{% url 'lingo-manager-paymentbackend-list' %}">{% trans 'Payment backends' %}</a>
14
{% endblock %}
15

  
16
{% block content %}
17

  
18
{% if object_list %}
19
<ul class="objects-list single-links">
20
 {% for payment_backend in object_list %}
21
 <li>
22
 <a href="{% url 'lingo-manager-paymentbackend-edit' pk=payment_backend.id %}">{{ payment_backend.label }}
23
   <span>({{payment_backend.service}})</span>
24
 </a>
25
  <a rel="popup" class="delete" href="{% url 'lingo-manager-paymentbackend-delete' pk=payment_backend.id %}">{% trans "remove" %}</a>
26
 </li>
27
 {% endfor %}
28
</ul>
29
{% else %}
30
<div class="big-msg-info">
31
  {% blocktrans %}
32
  This site doesn't have any payment backend yet. Click on the "New" button in the top
33
  right of the page to add a first one.
34
  {% endblocktrans %}
35
</div>
36
{% endif %}
37

  
38
{% endblock %}
combo/apps/lingo/templates/lingo/transaction_list.html
4 4
{% block appbar %}
5 5
<h2>{% trans 'Transactions' %}</h2>
6 6
<span class="actions">
7
<a href="{% url 'lingo-manager-paymentbackend-list' %}">{% trans 'Payment backends' %}</a>
7 8
<a href="{% url 'lingo-manager-regie-list' %}">{% trans 'Regies' %}</a>
8 9
<a href="{% url 'lingo-manager-transactions-download' %}">{% trans 'download CSV' %}</a>
9 10
</span>
combo/apps/lingo/urls.py
23 23
                    RemoveBasketItemApiView, ValidateTransactionApiView,
24 24
                    CancelTransactionApiView, SelfInvoiceView, BasketItemPayView)
25 25
from .manager_views import (RegieListView, RegieCreateView, RegieUpdateView,
26
        RegieDeleteView, TransactionListView, download_transactions_csv)
26
                            RegieDeleteView, TransactionListView, download_transactions_csv,
27
                            PaymentBackendListView, PaymentBackendCreateView,
28
                            PaymentBackendUpdateView, PaymentBackendDeleteView)
27 29

  
28 30
lingo_manager_urls = [
29 31
    url('^$', TransactionListView.as_view(), name='lingo-manager-homepage'),
......
34 36
        name='lingo-manager-regie-edit'),
35 37
    url(r'^regies/(?P<pk>\w+)/delete$', RegieDeleteView.as_view(),
36 38
        name='lingo-manager-regie-delete'),
39
    url('^paymentbackends/$', PaymentBackendListView.as_view(),
40
        name='lingo-manager-paymentbackend-list'),
41
    url('^paymentbackends/add/$', PaymentBackendCreateView.as_view(),
42
        name='lingo-manager-paymentbackend-add'),
43
    url(r'^paymentbackends/(?P<pk>\w+)/edit$', PaymentBackendUpdateView.as_view(),
44
        name='lingo-manager-paymentbackend-edit'),
45
    url(r'^paymentbackends/(?P<pk>\w+)/delete$', PaymentBackendDeleteView.as_view(),
46
        name='lingo-manager-paymentbackend-delete'),
37 47
]
38 48

  
39 49
urlpatterns = [
tests/test_lingo_cells.py
10 10

  
11 11
from combo.data.models import Page
12 12
from combo.apps.lingo.models import Regie, BasketItem, Transaction
13
from combo.apps.lingo.models import (LingoBasketCell,
13
from combo.apps.lingo.models import (LingoBasketCell, PaymentBackend,
14 14
        LingoRecentTransactionsCell, LingoBasketLinkCell, TipiPaymentFormCell)
15 15

  
16 16
pytestmark = pytest.mark.django_db
......
25 25

  
26 26
@pytest.fixture
27 27
def regie():
28
    try:
29
        payment_backend = PaymentBackend.objects.get(slug='test1')
30
    except PaymentBackend.DoesNotExist:
31
        payment_backend = PaymentBackend.objects.create(
32
            label='test1', slug='test1')
28 33
    try:
29 34
        regie = Regie.objects.get(slug='test')
30 35
    except Regie.DoesNotExist:
......
32 37
        regie.label = 'Test'
33 38
        regie.slug = 'test'
34 39
        regie.description = 'test'
40
        regie.payment_backend = payment_backend
35 41
        regie.save()
36 42
    return regie
37 43

  
tests/test_lingo_manager.py
10 10

  
11 11
import eopayment
12 12
from combo.data.models import Page
13
from combo.apps.lingo.models import Regie, BasketItem, Transaction, ActiveItems, TipiPaymentFormCell
13
from combo.apps.lingo.models import (Regie, BasketItem, Transaction, ActiveItems,
14
                                     TipiPaymentFormCell, PaymentBackend)
14 15
from decimal import Decimal
15 16

  
16 17
pytestmark = pytest.mark.django_db
17 18

  
18 19

  
20
@pytest.fixture
21
def payment_backend():
22
    return PaymentBackend.objects.create(
23
            label='test1', slug='test1', service='dummy', service_options={'siret': '1234'})
24

  
25

  
19 26
def login(app, username='admin', password='admin'):
20 27
    login_page = app.get('/login/')
21 28
    login_form = login_page.forms[0]
......
30 37
    resp = app.get('/manage/', status=200)
31 38
    assert '/manage/lingo/' in resp.text
32 39

  
33
def test_add_regie(app, admin_user):
40
def test_add_regie(app, admin_user, payment_backend):
34 41
    Regie.objects.all().delete()
35 42
    app = login(app)
36 43
    resp = app.get('/manage/lingo/regies/', status=200)
......
38 45
    resp.forms[0]['label'] = 'Test'
39 46
    resp.forms[0]['slug'] = 'test'
40 47
    resp.forms[0]['description'] = 'description'
41
    resp.forms[0]['service'] = 'dummy'
48
    resp.forms[0]['payment_backend'] = payment_backend.pk
42 49
    assert resp.form['is_default'].checked is True
43 50
    resp = resp.forms[0].submit()
44 51
    assert resp.location.endswith('/manage/lingo/regies/')
......
47 54
    assert regie.label == 'Test'
48 55
    assert regie.is_default is True
49 56

  
50
def test_edit_regie(app, admin_user):
51
    test_add_regie(app, admin_user)
57
def test_edit_regie(app, admin_user, payment_backend):
58
    test_add_regie(app, admin_user, payment_backend)
52 59
    app = login(app)
53 60
    resp = app.get('/manage/lingo/regies/', status=200)
54 61
    resp = resp.click('Test')
......
59 66
    regie = Regie.objects.all()[0]
60 67
    assert regie.description == 'other description'
61 68

  
62
def test_delete_regie(app, admin_user):
63
    test_add_regie(app, admin_user)
69
def test_delete_regie(app, admin_user, payment_backend):
70
    test_add_regie(app, admin_user, payment_backend)
64 71
    app = login(app)
65 72
    resp = app.get('/manage/lingo/regies/', status=200)
66 73
    resp = resp.click('remove')
67 74
    assert 'Are you sure you want to delete this?' in resp.text
68 75
    resp = resp.forms[0].submit()
69
    assert resp.location.endswith('/manage/lingo/regies/')
70 76
    assert Regie.objects.count() == 0
71 77

  
72
def test_add_second_regie(app, admin_user):
73
    test_add_regie(app, admin_user)
78
def test_add_second_regie(app, admin_user, payment_backend):
79
    test_add_regie(app, admin_user, payment_backend)
74 80
    regie = Regie.objects.all()[0]
75 81

  
76 82
    app = login(app)
......
79 85
    resp.forms[0]['label'] = 'Test2'
80 86
    resp.forms[0]['slug'] = 'test2'
81 87
    resp.forms[0]['description'] = 'description'
82
    resp.forms[0]['service'] = 'dummy'
88
    resp.forms[0]['payment_backend'] = payment_backend.pk
83 89
    assert resp.form['is_default'].checked is False
84 90
    resp = resp.forms[0].submit()
85 91
    assert resp.location.endswith('/manage/lingo/regies/')
......
88 94
    assert Regie.objects.get(id=regie.id).is_default is True
89 95
    assert Regie.objects.exclude(id=regie.id)[0].is_default is False
90 96

  
91
def test_download_transaction(app, admin_user):
92
    test_add_regie(app, admin_user)
97
def test_download_transaction(app, admin_user, payment_backend):
98
    test_add_regie(app, admin_user, payment_backend)
93 99
    regie = Regie.objects.filter(slug='test')[0]
94 100
    user = User.objects.create_user('dimebag', 'dime@bag.pan', 'pwd')
95 101
    user.last_name = u'Darëll'
......
164 170
    assert resp.text.count('ROLDEB:') == 1
165 171
    assert resp.text.count('ROLDET:') == 1
166 172

  
167
def test_configure_invoices_cell(app, admin_user):
173
def test_configure_invoices_cell(app, admin_user, payment_backend):
168 174
    page = Page(title='xxx', slug='test', template_name='standard')
169 175
    page.save()
170 176

  
......
179 185
    regie.label = 'Test'
180 186
    regie.slug = 'test'
181 187
    regie.description = 'test'
188
    regie.payment_backend = payment_backend
182 189
    regie.save()
183 190

  
184 191
    resp = app.get('/manage/pages/%s/' % page.id, status=200)
......
202 209
    regie2.slug = 'test2'
203 210
    regie2.description = 'test2'
204 211
    regie2.webservice_url = 'http://example.net/'
212
    regie2.payment_backend = payment_backend
205 213
    regie2.save()
206 214

  
207 215
    resp = app.get('/manage/pages/%s/' % page.id, status=200)
......
215 223
    resp.form['clingo_activeitems-%s-regie' % cell.id].value = 'test2'
216 224
    resp.form.submit()
217 225
    assert ActiveItems.objects.get(id=cell.id).regie == regie2.slug
226

  
227

  
228
def test_payment_backend_list(app, admin_user):
229
    PaymentBackend.objects.create(label='label1', slug='slug1')
230
    PaymentBackend.objects.create(label='label2', slug='slug2')
231
    app = login(app)
232
    resp = app.get('/manage/lingo/paymentbackends/', status=200)
233

  
234
    assert '/manage/lingo/paymentbackends/add' in resp.text
235
    assert 'label1' in resp.content
236
    assert 'label2' in resp.content
237

  
238
    for payment_backend in PaymentBackend.objects.all():
239
        assert '/manage/lingo/paymentbackends/%s' % payment_backend.pk in resp.text
240
        assert '/manage/lingo/paymentbackends/%s/delete' % payment_backend.pk in resp.text
241

  
242

  
243
def test_add_payment_backend(app, admin_user):
244
    assert not PaymentBackend.objects.count()
245
    app = login(app)
246
    resp = app.get('/manage/lingo/paymentbackends/add/', status=200)
247
    resp.forms[0]['label'] = 'Test'
248
    resp.forms[0]['slug'] = 'test-add'
249
    resp.forms[0]['service'] = 'dummy'
250
    resp.forms[0]['service_options'] = '{"siret": "1234"}'
251
    resp = resp.forms[0].submit()
252

  
253
    assert PaymentBackend.objects.count() == 1
254
    payment_backend = PaymentBackend.objects.get(slug='test-add')
255
    assert payment_backend.label == 'Test'
256
    assert payment_backend.service_options == {'siret': '1234'}
257

  
258
    assert resp.location.endswith('/manage/lingo/paymentbackends/')
259

  
260

  
261
def test_edit_payment_backend(app, admin_user):
262
    payment_backend = PaymentBackend.objects.create(label='label1', slug='slug1')
263
    app = login(app)
264
    resp = app.get('/manage/lingo/paymentbackends/%s/edit' % payment_backend.pk, status=200)
265

  
266
    resp.forms[0]['label'] = 'label1-modified'
267
    resp.forms[0]['slug'] = 'slug1'
268
    resp.forms[0]['service'] = 'dummy'
269
    resp.forms[0]['service_options'] = '{"siret": "1234"}'
270
    resp = resp.forms[0].submit()
271

  
272
    assert resp.location.endswith('/manage/lingo/paymentbackends/')
273
    payment_backend = PaymentBackend.objects.get(slug='slug1')
274
    assert payment_backend.label == 'label1-modified'
tests/test_notification.py
14 14

  
15 15
from combo.data.models import Page
16 16
from combo.apps.notifications.models import Notification, NotificationsCell
17
from combo.apps.lingo.models import Regie, ActiveItems
17
from combo.apps.lingo.models import Regie, ActiveItems, PaymentBackend
18 18

  
19 19
pytestmark = pytest.mark.django_db
20 20

  
......
28 28

  
29 29
@pytest.fixture
30 30
def regie():
31
    try:
32
        payment_backend = PaymentBackend.objects.get(slug='test1')
33
    except PaymentBackend.DoesNotExist:
34
        payment_backend = PaymentBackend.objects.create(
35
            label='test1', slug='test1', service='dummy')
31 36
    try:
32 37
        regie = Regie.objects.get(slug='remote')
33 38
    except Regie.DoesNotExist:
......
36 41
        regie.slug = 'remote'
37 42
        regie.description = 'remote'
38 43
        regie.payment_min_amount = Decimal(2.0)
39
        regie.service = 'dummy'
44
        regie.payment_backend = payment_backend
40 45
        regie.save()
41 46
    return regie
42 47

  
43
-