Projet

Général

Profil

0001-lingo-return-HttpResponseBadRequest-instead-of-Excep.patch

Lauréline Guérin, 28 janvier 2020 15:55

Télécharger (5,99 ko)

Voir les différences:

Subject: [PATCH] lingo: return HttpResponseBadRequest instead of Exception
 (#39277)

 combo/apps/lingo/views.py   | 23 +++++++++++----------
 tests/test_lingo_payment.py | 40 +++++++++++++++++++++++++++++++++++--
 2 files changed, 51 insertions(+), 12 deletions(-)
combo/apps/lingo/views.py
138 138

  
139 139
        if not 'amount' in request.GET and not 'amount' in request_body and \
140 140
                not 'amount' in extra:
141
            raise Exception('missing amount parameter')
141
            return HttpResponseBadRequest('missing amount parameter')
142 142

  
143 143
        item = BasketItem(amount=0)
144 144
        try:
......
171 171
            else:
172 172
                user = None
173 173
        except User.DoesNotExist:
174
            raise Exception('unknown user')
174
            return HttpResponseBadRequest('unknown user')
175 175

  
176 176
        item.user = user
177 177
        if request.GET.get('regie_id'):
......
240 240
        request_body = json.loads(force_text(self.request.body))
241 241

  
242 242
        if not 'basket_item_id' in request_body:
243
            raise Exception('missing basket_item_id parameter')
243
            return HttpResponseBadRequest('missing basket_item_id parameter')
244 244

  
245 245
        try:
246 246
            if request.GET.get('NameId'):
......
250 250
            elif request.GET.get('email'):
251 251
                user = User.objects.get(email=request.GET.get('email'))
252 252
            else:
253
                raise Exception('no user specified')
253
                return HttpResponseBadRequest('no user specified')
254 254
        except User.DoesNotExist:
255
            raise Exception('unknown user')
255
            return HttpResponseBadRequest('unknown user')
256

  
257
        try:
258
            item = BasketItem.objects.get(id=request_body.get('basket_item_id'),
259
                    user=user, cancellation_date__isnull=True)
260
        except BasketItem.DoesNotExist:
261
            return HttpResponseBadRequest('unknown basket item')
256 262

  
257
        item = BasketItem.objects.get(id=request_body.get('basket_item_id'),
258
                user=user, cancellation_date__isnull=True)
259 263
        notify_origin = bool(request_body.get('notify', 'false') == 'true')
260 264
        item.notify_cancellation(notify_origin=notify_origin)
261 265

  
......
520 524

  
521 525
class PaymentView(View):
522 526
    def handle_response(self, request, backend_response, **kwargs):
527
        assert 'regie_pk' in kwargs or 'payment_backend_pk' in kwargs
523 528
        if 'regie_pk' in kwargs:
524 529
            payment_backend = Regie.objects.get(id=kwargs['regie_pk']).payment_backend
525
        elif 'payment_backend_pk' in kwargs:
526
            payment_backend = PaymentBackend.objects.get(id=kwargs['payment_backend_pk'])
527 530
        else:
528
            raise Exception("A payment backend or regie primary key must be specified")
531
            payment_backend = PaymentBackend.objects.get(id=kwargs['payment_backend_pk'])
529 532

  
530 533
        payment = get_eopayment_object(request, payment_backend)
531 534
        logger = logging.getLogger(__name__)
tests/test_lingo_payment.py
251 251

  
252 252
    user_email = 'foo@example.com'
253 253
    User.objects.get_or_create(email=user_email)
254
    amount = 42
255
    data = {'amount': amount, 'display_name': 'test amount',
254

  
255
    data = {'display_name': 'test amount',
256 256
            'url': 'http://example.com'}
257
    url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
258
    url = sign_url(url, key)
259
    resp = app.post_json(url, params=data, status=400)
260
    assert 'missing amount parameter' in resp.text
261

  
262
    amount = 42
263
    data['amount'] = amount
264
    url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), 'unknown@example.com')
265
    url = sign_url(url, key)
266
    resp = app.post_json(url, params=data, status=400)
267
    assert 'unknown user' in resp.text
268

  
257 269
    url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
258 270
    url = sign_url(url, key)
259 271
    resp = app.post_json(url, params=data)
......
527 539
    assert BasketItem.objects.filter(amount=21, cancellation_date__isnull=True).exists()
528 540
    basket_item_id_2 = json.loads(resp.text)['id']
529 541

  
542
    url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
543
    url = sign_url(url, key)
544
    data = {'notify': 'true'}
545
    resp = app.post_json(url, params=data, status=400)
546
    assert 'missing basket_item_id parameter' in resp.text
547

  
548
    url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
549
    url = sign_url(url, key)
550
    data = {'basket_item_id': 0, 'notify': 'true'}
551
    resp = app.post_json(url, params=data, status=400)
552
    assert 'unknown basket item' in resp.text
553

  
554
    url = '%s?orig=wcs' % (reverse('api-remove-basket-item'))
555
    url = sign_url(url, key)
556
    data = {'basket_item_id': basket_item_id, 'notify': 'true'}
557
    resp = app.post_json(url, params=data, status=400)
558
    assert 'no user specified' in resp.text
559

  
560
    url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), 'unknown@example.com')
561
    url = sign_url(url, key)
562
    data = {'basket_item_id': basket_item_id, 'notify': 'true'}
563
    resp = app.post_json(url, params=data, status=400)
564
    assert 'unknown user' in resp.text
565

  
530 566
    with mock.patch('combo.utils.requests_wrapper.RequestsSession.request') as request:
531 567
        url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
532 568
        url = sign_url(url, key)
533
-