From cf160be3d1081d3ba64c25e93fb1764ef750e7e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 11 Oct 2017 17:20:56 +0200 Subject: [PATCH] lingo: factor items to be paid queryset in a classmethod (#19383) --- combo/apps/lingo/models.py | 18 +++++++++--------- combo/apps/lingo/views.py | 18 +++++------------- tests/test_lingo_payment.py | 8 ++++---- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/combo/apps/lingo/models.py b/combo/apps/lingo/models.py index 37baa6f..d643157 100644 --- a/combo/apps/lingo/models.py +++ b/combo/apps/lingo/models.py @@ -226,6 +226,12 @@ class BasketItem(models.Model): class Meta: ordering = ['regie', 'extra_fee', 'subject'] + @classmethod + def get_items_to_be_paid(cls, user): + return cls.objects.filter( + user=user, payment_date__isnull=True + ).exclude(cancellation_date__isnull=False) + def notify(self, status): if not self.source_url: return @@ -395,17 +401,13 @@ class LingoBasketCell(CellBase): def is_relevant(self, context): if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()): return False - items = BasketItem.objects.filter( - user=context['request'].user, payment_date__isnull=True - ).exclude(cancellation_date__isnull=False) + items = BasketItem.get_items_to_be_paid(context['request'].user) return len(items) > 0 def get_badge(self, context): if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()): return - items = BasketItem.objects.filter( - user=context['request'].user, payment_date__isnull=True - ).exclude(cancellation_date__isnull=False) + items = BasketItem.get_items_to_be_paid(context['request'].user) if not items: return total = sum([x.amount for x in items]) @@ -413,9 +415,7 @@ class LingoBasketCell(CellBase): def render(self, context): basket_template = template.loader.get_template('lingo/combo/basket.html') - items = BasketItem.objects.filter( - user=context['request'].user, payment_date__isnull=True - ).exclude(cancellation_date__isnull=False) + items = BasketItem.get_items_to_be_paid(context['request'].user) regies = {} for item in items: if not item.regie_id in regies: diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index 7cc4368..8e2e51d 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -307,9 +307,7 @@ class PayView(View): else: if not regie_id: # take all items but check they're from the same regie - items = BasketItem.objects.filter(user=self.request.user, - payment_date__isnull=True, - cancellation_date__isnull=True) + items = BasketItem.get_items_to_be_paid(user=self.request.user) regie_id = items[0].regie_id for item in items: if item.regie_id != regie_id: @@ -319,10 +317,7 @@ class PayView(View): regie = Regie.objects.get(id=regie_id) regie.compute_extra_fees(user=self.request.user) - items = BasketItem.objects.filter(user=self.request.user, - payment_date__isnull=True, - cancellation_date__isnull=True, - regie=regie) + items = BasketItem.get_items_to_be_paid(user=self.request.user).filter(regie=regie) transaction = Transaction() if request.user.is_authenticated(): @@ -491,9 +486,8 @@ class ReturnView(View): # return to basket page if there are still items to pay if request.user.is_authenticated(): - remaining_basket_items = BasketItem.objects.filter( - user=self.request.user, payment_date__isnull=True, - cancellation_date__isnull=False).count() + remaining_basket_items = BasketItem.get_items_to_be_paid( + user=self.request.user).count() if remaining_basket_items: return HttpResponseRedirect(get_basket_url()) return HttpResponseRedirect('/') @@ -570,9 +564,7 @@ class CancelItemView(DetailView): return context def get_queryset(self): - return BasketItem.objects.filter(user=self.request.user.id, - payment_date__isnull=True, - cancellation_date__isnull=True) + return BasketItem.get_items_to_be_paid(user=self.request.user) def post(self, request, *args, **kwargs): if not request.user.is_authenticated(): diff --git a/tests/test_lingo_payment.py b/tests/test_lingo_payment.py index 52bbbc4..2450c2a 100644 --- a/tests/test_lingo_payment.py +++ b/tests/test_lingo_payment.py @@ -134,14 +134,14 @@ def test_successfull_items_payment(regie, user): # make sure return url is the user return URL assert urlparse.urlparse(qs['return_url'][0]).path.startswith( reverse('lingo-return', kwargs={'regie_pk': regie.id})) - # simulate successful return URL - resp = client.get(qs['return_url'][0], args) - assert resp.status_code == 302 - assert urlparse.urlparse(resp.url).path == '/' # simulate successful call to callback URL with mock.patch('combo.utils.RequestsSession.request') as request: resp = client.get(reverse('lingo-callback', kwargs={'regie_pk': regie.id}), args) assert resp.status_code == 200 + # simulate successful return URL + resp = client.get(qs['return_url'][0], args) + assert resp.status_code == 302 + assert urlparse.urlparse(resp.url).path == '/' def test_add_amount_to_basket(key, regie, user): other_regie = Regie(label='test2', slug='test2') -- 2.15.0.rc0