From 4a26f3229e651881d8d88057b087fd3a93aeea86 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sat, 10 Oct 2020 08:26:00 +0200 Subject: [PATCH 2/7] lingo: document handle_payment contract with assert (#47506) --- combo/apps/lingo/views.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index 1f803a66..fba0490a 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -358,19 +358,14 @@ class PayMixin(object): def handle_payment( self, request, regie, items, remote_items, next_url='/', email='', firstname='', lastname=''): - # we cannot pay items and remote_items at the same time - if bool(len(items)) == bool(len(remote_items)): - logger.error('lingo: there should be at least one item or remote item to pay and not both items', - extra={'regie': str(regie), 'items': items, 'remote_items': remote_items}) - messages.error(request, _('Grouping basket items is not allowed.')) - return HttpResponseRedirect(next_url) - - # we cannot pay more than one item on regie with flag 'can_pay_only_one_basket_item' - if regie.can_pay_only_one_basket_item and len(items) != 1 and len(remote_items) != 1: - logger.error('lingo: regie can only pay one basket item, but handle_payment() received', - extra={'regie': str(regie), 'items': items, 'remote_items': remote_items}) - messages.error(request, _('Grouping basket items is not allowed.')) - return HttpResponseRedirect(next_url) + # check contract + assert bool(len(items)) != bool(len(remote_items)), ( + 'there should be at least one item or remote item to pay and not both items' + ) + assert not regie.can_pay_only_one_basket_item or len(items) == 1, ( + 'regie can only pay one basket item, but handle_payment() ' + 'did not receive one item: len(items) = %d' % len(items) + ) total_amount = sum([x.amount for x in remote_items or items]) -- 2.28.0