Projet

Général

Profil

0001-lingo-don-t-fail-on-payment-if-error-occured-on-remo.patch

Lauréline Guérin, 08 janvier 2021 11:53

Télécharger (3,75 ko)

Voir les différences:

Subject: [PATCH] lingo: don't fail on payment if error occured on remote item
 (#49863)

 combo/apps/lingo/views.py        | 15 +++++++++----
 tests/test_lingo_remote_regie.py | 36 ++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 4 deletions(-)
combo/apps/lingo/views.py
466 466
        remote_items = []
467 467
        items = []
468 468
        if regie_id and Regie.objects.get(pk=regie_id).is_remote():
469
            regie = Regie.objects.get(pk=regie_id)
470
            # get all items data from regie webservice
471
            for item_id in request.POST.getlist('item'):
472
                remote_items.append(regie.get_invoice(user, item_id))
469
            try:
470
                regie = Regie.objects.get(pk=regie_id)
471
                # get all items data from regie webservice
472
                for item_id in request.POST.getlist('item'):
473
                    remote_items.append(regie.get_invoice(user, item_id))
474
            except (requests.exceptions.RequestException, RemoteInvoiceException):
475
                messages.error(request, _(u'Technical error: impossible to retrieve invoices.'))
476
                return HttpResponseRedirect(next_url)
477
            except ObjectDoesNotExist:
478
                messages.error(request, _(u'No invoice was found.'))
479
                return HttpResponseRedirect(next_url)
473 480
        else:
474 481
            if user is None:
475 482
                messages.error(request, _(u'Payment requires to be logged in.'))
tests/test_lingo_remote_regie.py
416 416
    mock_resp = Response()
417 417
    mock_resp.status_code = 404
418 418
    mock_get.return_value = mock_resp
419
    resp = app.get('/lingo/item/%s/%s/' % (remote_regie.id, encrypt_id))
420
    assert '<h2>Technical error: impossible to retrieve invoices.</h2>' in resp.text
421

  
422

  
423
@mock.patch('combo.apps.lingo.models.Regie.pay_invoice')
424
@mock.patch('combo.apps.lingo.models.requests.get')
425
def test_pay_remote_item_failure(mock_get, mock_pay_invoice, app, remote_regie):
426
    encrypt_id = aes_hex_encrypt(settings.SECRET_KEY, force_bytes('F201601'))
427
    mock_json = mock.Mock(status_code=200)
428
    mock_json.json.return_value = {'err': 0, 'data': INVOICES[0]}
429
    mock_get.return_value = mock_json
430
    mock_pay_invoice.return_value = mock.Mock(status_code=200)
431
    url = '/lingo/item/%s/%s/' % (remote_regie.id, encrypt_id)
432
    resp = app.get(url)
433

  
434
    form = resp.form
435

  
436
    mock_json = mock.Mock()
437
    mock_json.json.return_value = {'err': 1}
438
    mock_get.return_value = mock_json
439
    resp = form.submit().follow()
440
    assert 'Technical error: impossible to retrieve invoices.' in app.session['_messages']
441

  
442
    mock_json.json.return_value = {'err': 0}
443
    resp = form.submit().follow()
444
    assert 'No invoice was found.' in app.session['_messages']
445

  
446
    mock_get.side_effect = ConnectionError('where is my hostname?')
447
    resp = form.submit().follow()
448
    assert 'Technical error: impossible to retrieve invoices.' in app.session['_messages']
449

  
450
    mock_resp = Response()
451
    mock_resp.status_code = 404
452
    mock_get.return_value = mock_resp
453
    resp = form.submit().follow()
454
    assert 'Technical error: impossible to retrieve invoices.' in app.session['_messages']
419 455

  
420 456

  
421 457
@mock.patch('combo.apps.lingo.models.requests.get')
422
-