lingo: provision Regie.has_invoice_for_payment during Regie.get_invoices() (#76853)

This commit is contained in:
Benjamin Dauvergne 2023-04-21 01:14:09 +02:00
parent c092e19c77
commit cb33b47a19
2 changed files with 32 additions and 2 deletions

View File

@ -387,6 +387,11 @@ class Regie(models.Model):
raise RegieException(regie_exc_msg) from e
if items.get('err'):
raise RegieException(regie_exc_msg)
if not history:
has_invoice_for_payment = items.get('has_invoice_for_payment', False)
if self.has_invoice_for_payment != has_invoice_for_payment:
self.has_invoice_for_payment = has_invoice_for_payment
self.save(update_fields=['has_invoice_for_payment'])
if items.get('data'):
if not isinstance(items['data'], list):
raise RegieException(regie_exc_msg)

View File

@ -30,6 +30,7 @@ from combo.apps.lingo.models import (
SelfDeclaredInvoicePayment,
Transaction,
)
from combo.apps.lingo.views import PayView
from combo.data.models import Page
from combo.utils import aes_hex_encrypt, check_query
@ -1133,21 +1134,27 @@ def test_send_new_remote_invoices_by_email(mock_get, user_saml, admin, app, remo
def remote_invoices_httmock():
invoices = []
invoice = {}
kwargs = {}
netloc = 'remote.regie.example.com'
@httmock.urlmatch(netloc=netloc, path='^/invoice/')
@httmock.remember_called
def invoice_mock(url, request):
return json.dumps({'err': 0, 'data': invoice})
return json.dumps({'err': 0, 'data': invoice, **kwargs})
@httmock.urlmatch(netloc=netloc, path='^/invoices/')
@httmock.remember_called
def invoices_mock(url, request):
return json.dumps({'err': 0, 'data': invoices})
return json.dumps({'err': 0, 'data': invoices, **kwargs})
context_manager = httmock.HTTMock(invoices_mock, invoice_mock)
context_manager.url = 'https://%s/' % netloc
context_manager.invoices = invoices
context_manager.invoice = invoice
context_manager.invoice_mock = invoice_mock
context_manager.invoices_mock = invoices_mock
context_manager.kwargs = kwargs
with context_manager:
yield context_manager
@ -1639,3 +1646,21 @@ def test_wrong_crypted_credit(mock_get, remote_regie, app):
mock_json.json.return_value = {'err': 0, 'data': CREDITS[0]}
mock_get.return_value = mock_json
app.get('/lingo/credit/%s/%s/' % (remote_regie.id, 'zrzer854sfaear45e6rzerzerzef'), status=404)
def test_has_invoice_for_payment_provisionning(remote_regie, remote_invoices_httmock):
remote_regie.webservice_url = remote_invoices_httmock.url
remote_regie.save()
user = MockUser()
assert not remote_regie.has_invoice_for_payment
remote_invoices_httmock.invoices[:] = INVOICES
remote_regie.get_invoices(user)
remote_regie.refresh_from_db()
assert not remote_regie.has_invoice_for_payment
remote_invoices_httmock.kwargs.update({'has_invoice_for_payment': True})
remote_regie.get_invoices(user)
remote_regie.refresh_from_db()
assert remote_regie.has_invoice_for_payment