Projet

Général

Profil

0001-lingo-factor-items-to-be-paid-queryset-in-a-classmet.patch

Frédéric Péters, 11 octobre 2017 17:25

Télécharger (5,92 ko)

Voir les différences:

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(-)
combo/apps/lingo/models.py
226 226
    class Meta:
227 227
        ordering = ['regie', 'extra_fee', 'subject']
228 228

  
229
    @classmethod
230
    def get_items_to_be_paid(cls, user):
231
        return cls.objects.filter(
232
                user=user, payment_date__isnull=True
233
                ).exclude(cancellation_date__isnull=False)
234

  
229 235
    def notify(self, status):
230 236
        if not self.source_url:
231 237
            return
......
395 401
    def is_relevant(self, context):
396 402
        if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()):
397 403
            return False
398
        items = BasketItem.objects.filter(
399
                user=context['request'].user, payment_date__isnull=True
400
                ).exclude(cancellation_date__isnull=False)
404
        items = BasketItem.get_items_to_be_paid(context['request'].user)
401 405
        return len(items) > 0
402 406

  
403 407
    def get_badge(self, context):
404 408
        if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()):
405 409
            return
406
        items = BasketItem.objects.filter(
407
                user=context['request'].user, payment_date__isnull=True
408
                ).exclude(cancellation_date__isnull=False)
410
        items = BasketItem.get_items_to_be_paid(context['request'].user)
409 411
        if not items:
410 412
            return
411 413
        total = sum([x.amount for x in items])
......
413 415

  
414 416
    def render(self, context):
415 417
        basket_template = template.loader.get_template('lingo/combo/basket.html')
416
        items = BasketItem.objects.filter(
417
                user=context['request'].user, payment_date__isnull=True
418
                ).exclude(cancellation_date__isnull=False)
418
        items = BasketItem.get_items_to_be_paid(context['request'].user)
419 419
        regies = {}
420 420
        for item in items:
421 421
            if not item.regie_id in regies:
combo/apps/lingo/views.py
307 307
        else:
308 308
            if not regie_id:
309 309
                # take all items but check they're from the same regie
310
                items = BasketItem.objects.filter(user=self.request.user,
311
                        payment_date__isnull=True,
312
                        cancellation_date__isnull=True)
310
                items = BasketItem.get_items_to_be_paid(user=self.request.user)
313 311
                regie_id = items[0].regie_id
314 312
                for item in items:
315 313
                    if item.regie_id != regie_id:
......
319 317
            regie = Regie.objects.get(id=regie_id)
320 318

  
321 319
            regie.compute_extra_fees(user=self.request.user)
322
            items = BasketItem.objects.filter(user=self.request.user,
323
                    payment_date__isnull=True,
324
                    cancellation_date__isnull=True,
325
                    regie=regie)
320
            items = BasketItem.get_items_to_be_paid(user=self.request.user).filter(regie=regie)
326 321

  
327 322
        transaction = Transaction()
328 323
        if request.user.is_authenticated():
......
491 486

  
492 487
        # return to basket page if there are still items to pay
493 488
        if request.user.is_authenticated():
494
            remaining_basket_items = BasketItem.objects.filter(
495
                user=self.request.user, payment_date__isnull=True,
496
                cancellation_date__isnull=False).count()
489
            remaining_basket_items = BasketItem.get_items_to_be_paid(
490
                user=self.request.user).count()
497 491
            if remaining_basket_items:
498 492
                return HttpResponseRedirect(get_basket_url())
499 493
        return HttpResponseRedirect('/')
......
570 564
        return context
571 565

  
572 566
    def get_queryset(self):
573
        return BasketItem.objects.filter(user=self.request.user.id,
574
                payment_date__isnull=True,
575
                cancellation_date__isnull=True)
567
        return BasketItem.get_items_to_be_paid(user=self.request.user)
576 568

  
577 569
    def post(self, request, *args, **kwargs):
578 570
        if not request.user.is_authenticated():
tests/test_lingo_payment.py
134 134
    # make sure return url is the user return URL
135 135
    assert urlparse.urlparse(qs['return_url'][0]).path.startswith(
136 136
            reverse('lingo-return', kwargs={'regie_pk': regie.id}))
137
    # simulate successful return URL
138
    resp = client.get(qs['return_url'][0], args)
139
    assert resp.status_code == 302
140
    assert urlparse.urlparse(resp.url).path == '/'
141 137
    # simulate successful call to callback URL
142 138
    with mock.patch('combo.utils.RequestsSession.request') as request:
143 139
        resp = client.get(reverse('lingo-callback', kwargs={'regie_pk': regie.id}), args)
144 140
    assert resp.status_code == 200
141
    # simulate successful return URL
142
    resp = client.get(qs['return_url'][0], args)
143
    assert resp.status_code == 302
144
    assert urlparse.urlparse(resp.url).path == '/'
145 145

  
146 146
def test_add_amount_to_basket(key, regie, user):
147 147
    other_regie = Regie(label='test2', slug='test2')
148
-