lingo: add active invoices page url in invoice payment form (#22607)
This commit is contained in:
parent
9d896b4188
commit
dbd744e3d2
|
@ -51,6 +51,7 @@
|
|||
|
||||
<input type="hidden" name="regie" value="{{ regie.pk }}"/>
|
||||
<input type="hidden" name="item" value="{{ item.id }}"/>
|
||||
<input type="hidden" name="next_url" value="{{ page.get_online_url }}" />
|
||||
{% if item_url %}
|
||||
<input type="hidden" name="item_url" value="{{ item_url }}"/>
|
||||
{% endif %}
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
</td>
|
||||
{% if item.regie.is_remote %}
|
||||
<td>
|
||||
<a href="{% url 'view-item' regie_id=item.regie.pk item_crypto_id=item.crypto_id %}" rel="popup" class="icon-view">{% trans "View" %}
|
||||
<a href="{% url 'view-item' regie_id=item.regie.pk item_crypto_id=item.crypto_id %}?page={{ cell.page.pk }}" rel="popup" class="icon-view">{% trans "View" %}
|
||||
{% if item.online_payment and item.amount >= item.regie.payment_min_amount %}{% trans "and pay" %}{% endif %}
|
||||
</a>
|
||||
{% if item.has_pdf %}
|
||||
|
|
|
@ -38,6 +38,7 @@ from django.utils.encoding import smart_text
|
|||
|
||||
import eopayment
|
||||
|
||||
from combo.data.models import Page
|
||||
from combo.utils import check_request_signature, aes_hex_decrypt, DecryptionError
|
||||
|
||||
if 'mellon' in settings.INSTALLED_APPS:
|
||||
|
@ -603,6 +604,11 @@ class ItemView(TemplateView):
|
|||
item = regie.get_invoice(self.request.user, item_id)
|
||||
if not item:
|
||||
raise Http404(_('No item was found.'))
|
||||
if self.request.GET.get('page'):
|
||||
try:
|
||||
ret['page'] = Page.objects.get(pk=self.request.GET['page'])
|
||||
except (Page.DoesNotExist, ValueError):
|
||||
pass
|
||||
ret.update({'item': item, 'regie': regie})
|
||||
return ret
|
||||
|
||||
|
|
|
@ -105,6 +105,7 @@ def test_remote_regie_active_invoices_cell(mock_request, remote_regie):
|
|||
assert 'F-2016-One' in content
|
||||
assert '123.45' in content
|
||||
|
||||
assert '?page=%s' % page.pk in content
|
||||
# check if regie webservice has been correctly called
|
||||
assert mock_request.call_args[0][0] == 'GET'
|
||||
url = mock_request.call_args[0][1]
|
||||
|
@ -293,19 +294,21 @@ def test_self_declared_invoice(mock_get, app, remote_regie):
|
|||
@mock.patch('combo.apps.lingo.models.requests.get')
|
||||
@mock.patch('combo.apps.lingo.models.requests.post')
|
||||
def test_remote_item_payment_failure(mock_post, mock_get, mock_pay_invoice, app, remote_regie):
|
||||
page = Page(title='xxx', slug='active-remote-invoices-page', template_name='standard')
|
||||
page.save()
|
||||
assert remote_regie.is_remote()
|
||||
encrypt_id = aes_hex_encrypt(settings.SECRET_KEY, 'F201601')
|
||||
mock_json = mock.Mock()
|
||||
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)
|
||||
resp = app.get('/lingo/item/%s/%s/' % (remote_regie.id, encrypt_id))
|
||||
resp = app.get('/lingo/item/%s/%s/?page=%s' % (remote_regie.id, encrypt_id, page.pk))
|
||||
form = resp.form
|
||||
|
||||
assert 'email' in form.fields
|
||||
assert form['email'].value == ''
|
||||
assert 'item_url' in form.fields
|
||||
assert form['item_url'].value == '/lingo/item/%s/%s/' % (remote_regie.id, encrypt_id)
|
||||
assert form['item_url'].value == '/lingo/item/%s/%s/?page=%s' % (remote_regie.id, encrypt_id, page.pk)
|
||||
assert 'item' in form.fields
|
||||
assert form['item'].value == 'F201601'
|
||||
assert 'regie' in form.fields
|
||||
|
@ -325,11 +328,11 @@ def test_remote_item_payment_failure(mock_post, mock_get, mock_pay_invoice, app,
|
|||
# make sure return url is the user return URL
|
||||
assert urlparse.urlparse(qs['return_url'][0]).path.startswith(
|
||||
reverse('lingo-return', kwargs={'regie_pk': remote_regie.id}))
|
||||
# simulate successful return URL
|
||||
# simulate payment failure
|
||||
mock_get.side_effect = ConnectionError('where is my hostname?')
|
||||
resp = app.get(qs['return_url'][0], params=args)
|
||||
assert resp.status_code == 302
|
||||
assert urlparse.urlparse(resp.url).path == '/'
|
||||
assert urlparse.urlparse(resp.url).path == '/active-remote-invoices-page/'
|
||||
# simulate successful call to callback URL
|
||||
resp = app.get(reverse('lingo-callback', kwargs={'regie_pk': remote_regie.id}), params=args)
|
||||
trans = Transaction.objects.all()
|
||||
|
@ -349,6 +352,38 @@ def test_remote_item_payment_failure(mock_post, mock_get, mock_pay_invoice, app,
|
|||
|
||||
call_command('update_transactions')
|
||||
|
||||
|
||||
@mock.patch('combo.apps.lingo.models.Regie.pay_invoice')
|
||||
@mock.patch('combo.apps.lingo.models.requests.get')
|
||||
def test_remote_invoice_successfull_payment_redirect(mock_get, mock_pay_invoice, app, remote_regie):
|
||||
page = Page(title='xxx', slug='active-remote-invoices-page', template_name='standard')
|
||||
page.save()
|
||||
assert remote_regie.is_remote()
|
||||
encrypt_id = aes_hex_encrypt(settings.SECRET_KEY, 'F201601')
|
||||
mock_json = mock.Mock()
|
||||
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)
|
||||
resp = app.get('/lingo/item/%s/%s/?page=%s' % (remote_regie.id, encrypt_id, page.pk))
|
||||
form = resp.form
|
||||
assert form['next_url'].value == '/active-remote-invoices-page/'
|
||||
form['email'] = 'test@example.net'
|
||||
resp = form.submit()
|
||||
|
||||
assert resp.status_code == 302
|
||||
location = resp.location
|
||||
assert 'dummy-payment' in location
|
||||
parsed = urlparse.urlparse(location)
|
||||
# get return_url and transaction id from location
|
||||
qs = urlparse.parse_qs(parsed.query)
|
||||
args = {'transaction_id': qs['transaction_id'][0], 'signed': True,
|
||||
'ok': True, 'reason': 'Paid'}
|
||||
|
||||
resp = app.get(qs['return_url'][0], params=args)
|
||||
assert resp.status_code == 302
|
||||
assert urlparse.urlparse(resp.location).path == '/active-remote-invoices-page/'
|
||||
|
||||
|
||||
@mock.patch('combo.apps.lingo.models.requests.get')
|
||||
def test_send_new_remote_invoices_by_email(mock_get, admin, app, remote_regie, mailoutbox):
|
||||
datetime_format = '%Y-%m-%dT%H:%M:%S'
|
||||
|
|
Loading…
Reference in New Issue