lingo: don't fail on payment if error occured on remote item (#49863)
This commit is contained in:
parent
469818dd3c
commit
7d61835c25
|
@ -466,10 +466,17 @@ class PayView(PayMixin, View):
|
|||
remote_items = []
|
||||
items = []
|
||||
if regie_id and Regie.objects.get(pk=regie_id).is_remote():
|
||||
regie = Regie.objects.get(pk=regie_id)
|
||||
# get all items data from regie webservice
|
||||
for item_id in request.POST.getlist('item'):
|
||||
remote_items.append(regie.get_invoice(user, item_id))
|
||||
try:
|
||||
regie = Regie.objects.get(pk=regie_id)
|
||||
# get all items data from regie webservice
|
||||
for item_id in request.POST.getlist('item'):
|
||||
remote_items.append(regie.get_invoice(user, item_id))
|
||||
except (requests.exceptions.RequestException, RemoteInvoiceException):
|
||||
messages.error(request, _(u'Technical error: impossible to retrieve invoices.'))
|
||||
return HttpResponseRedirect(next_url)
|
||||
except ObjectDoesNotExist:
|
||||
messages.error(request, _(u'No invoice was found.'))
|
||||
return HttpResponseRedirect(next_url)
|
||||
else:
|
||||
if user is None:
|
||||
messages.error(request, _(u'Payment requires to be logged in.'))
|
||||
|
|
|
@ -416,6 +416,42 @@ def test_remote_item_failure(mock_get, app, remote_regie):
|
|||
mock_resp = Response()
|
||||
mock_resp.status_code = 404
|
||||
mock_get.return_value = mock_resp
|
||||
resp = app.get('/lingo/item/%s/%s/' % (remote_regie.id, encrypt_id))
|
||||
assert '<h2>Technical error: impossible to retrieve invoices.</h2>' in resp.text
|
||||
|
||||
|
||||
@mock.patch('combo.apps.lingo.models.Regie.pay_invoice')
|
||||
@mock.patch('combo.apps.lingo.models.requests.get')
|
||||
def test_pay_remote_item_failure(mock_get, mock_pay_invoice, app, remote_regie):
|
||||
encrypt_id = aes_hex_encrypt(settings.SECRET_KEY, force_bytes('F201601'))
|
||||
mock_json = mock.Mock(status_code=200)
|
||||
mock_json.json.return_value = {'err': 0, 'data': INVOICES[0]}
|
||||
mock_get.return_value = mock_json
|
||||
mock_pay_invoice.return_value = mock.Mock(status_code=200)
|
||||
url = '/lingo/item/%s/%s/' % (remote_regie.id, encrypt_id)
|
||||
resp = app.get(url)
|
||||
|
||||
form = resp.form
|
||||
|
||||
mock_json = mock.Mock()
|
||||
mock_json.json.return_value = {'err': 1}
|
||||
mock_get.return_value = mock_json
|
||||
resp = form.submit().follow()
|
||||
assert 'Technical error: impossible to retrieve invoices.' in app.session['_messages']
|
||||
|
||||
mock_json.json.return_value = {'err': 0}
|
||||
resp = form.submit().follow()
|
||||
assert 'No invoice was found.' in app.session['_messages']
|
||||
|
||||
mock_get.side_effect = ConnectionError('where is my hostname?')
|
||||
resp = form.submit().follow()
|
||||
assert 'Technical error: impossible to retrieve invoices.' in app.session['_messages']
|
||||
|
||||
mock_resp = Response()
|
||||
mock_resp.status_code = 404
|
||||
mock_get.return_value = mock_resp
|
||||
resp = form.submit().follow()
|
||||
assert 'Technical error: impossible to retrieve invoices.' in app.session['_messages']
|
||||
|
||||
|
||||
@mock.patch('combo.apps.lingo.models.requests.get')
|
||||
|
|
Loading…
Reference in New Issue