Projet

Général

Profil

0001-lingo-stop-retrying-notify-after-4-days-48393.patch

Lauréline Guérin, 23 novembre 2020 15:52

Télécharger (4,79 ko)

Voir les différences:

Subject: [PATCH 1/2] lingo: stop retrying notify after 4 days (#48393)

 combo/apps/lingo/__init__.py | 17 +++++++++++----
 tests/test_lingo_payment.py  | 42 ++++++++++++++++++++++++++++++------
 2 files changed, 48 insertions(+), 11 deletions(-)
combo/apps/lingo/__init__.py
22 22
from django.utils import timezone
23 23
from django.utils.translation import ugettext_lazy as _
24 24

  
25
import eopayment
26

  
25 27

  
26 28
class AppConfig(django.apps.AppConfig):
27 29
    name = 'combo.apps.lingo'
......
43 45
        from .models import Transaction, EXPIRED
44 46
        logger = logging.getLogger(__name__)
45 47
        now = timezone.now()
46
        for transaction in Transaction.objects.filter(
47
                start_date__lt=now-datetime.timedelta(hours=1),
48
                end_date__isnull=True):
48
        to_expire = Transaction.objects.filter(
49
            start_date__lt=now-datetime.timedelta(hours=1),
50
            end_date__isnull=True
51
        )
52
        for transaction in to_expire:
49 53
            logger.info('transaction %r is expired', transaction.order_id)
50 54
            transaction.status = EXPIRED
51 55
            transaction.save()
52 56

  
53
        for transaction in Transaction.objects.filter(to_be_paid_remote_items__isnull=False):
57
        to_retry = Transaction.objects.filter(
58
            status__in=(eopayment.PAID, eopayment.ACCEPTED),
59
            to_be_paid_remote_items__isnull=False,
60
            start_date__gt=now-datetime.timedelta(days=4)
61
        )
62
        for transaction in to_retry:
54 63
            transaction.retry_notify_remote_items_of_payments()
55 64

  
56 65
    def notify_payments(self):
tests/test_lingo_payment.py
2 2
import eopayment
3 3
import pytest
4 4
from datetime import datetime, timedelta
5
import urllib
6 5
from decimal import Decimal
7 6
import json
8 7
import mock
......
14 13
from django.contrib.auth.models import User
15 14
from django.http.request import QueryDict
16 15
from django.urls import reverse
17
from django.core.wsgi import get_wsgi_application
18 16
from django.conf import settings
19 17
from django.test import override_settings
20 18
from django.utils import timezone
21
from django.utils.http import urlencode
22 19
from django.utils.six.moves.urllib import parse as urlparse
23 20
from django.utils.timezone import utc
24
from django.contrib.messages.storage.session import SessionStorage
25
from webtest import TestApp
26 21

  
27 22
from combo.data.models import Page
28 23
from combo.apps.lingo.models import (
29
    Regie, BasketItem, Transaction, TransactionOperation, RemoteItem, EXPIRED, LingoBasketCell,
24
    Regie, BasketItem, Transaction, TransactionOperation, EXPIRED, LingoBasketCell,
30 25
    PaymentBackend)
31
from combo.utils import aes_hex_decrypt, sign_url
26
from combo.utils import sign_url
32 27
from combo.apps.lingo.views import signing_loads, signing_dumps
33 28

  
34 29
import httmock
......
1045 1040
    assert Transaction.objects.get(id=t1.id).status == EXPIRED
1046 1041
    assert Transaction.objects.get(id=t2.id).status == 0
1047 1042

  
1043

  
1044
@mock.patch('combo.utils.requests_wrapper.RequestsSession.request')
1045
def test_transaction_retry(mock_request, remote_regie):
1046
    transaction = Transaction.objects.create(
1047
        status=eopayment.PAID, regie=remote_regie,
1048
        end_date=timezone.now(),
1049
        to_be_paid_remote_items='42,35')
1050
    transaction.start_date = timezone.now() - timedelta(days=3)
1051
    transaction.save()
1052

  
1053
    appconfig = apps.get_app_config('lingo')
1054

  
1055
    mock_json = mock.Mock()
1056
    mock_json.status_code = 200
1057
    mock_json.json.return_value = {'err': 0, 'data': {
1058
        'created': '2020-11-23', 'pay_limit_date': '2021-11-23',
1059
        'total_amount': '123.45', 'amount': '123.45'}}
1060
    mock_request.return_value = mock_json
1061

  
1062
    appconfig.update_transactions()
1063
    transaction.refresh_from_db()
1064
    assert transaction.to_be_paid_remote_items is None
1065

  
1066
    # too old
1067
    transaction.to_be_paid_remote_items = '42,35'
1068
    transaction.start_date = timezone.now() - timedelta(days=4)
1069
    transaction.save()
1070

  
1071
    appconfig.update_transactions()
1072
    transaction.refresh_from_db()
1073
    assert transaction.to_be_paid_remote_items == '42,35'
1074

  
1075

  
1048 1076
def test_transaction_validate(app, key, regie, user):
1049 1077
    t1 = Transaction(regie=regie, bank_data={'bank': 'data'}, amount=12,
1050 1078
            status=eopayment.PAID)
1051
-