6 |
6 |
from decimal import Decimal
|
7 |
7 |
import json
|
8 |
8 |
import mock
|
|
9 |
import uuid
|
|
10 |
|
|
11 |
from mellon.models import UserSAMLIdentifier
|
9 |
12 |
|
10 |
13 |
from django.apps import apps
|
11 |
14 |
from django.contrib.auth.models import User
|
... | ... | |
106 |
109 |
email='foo@example.com')
|
107 |
110 |
return user
|
108 |
111 |
|
|
112 |
@pytest.fixture
|
|
113 |
def user_name_id(user):
|
|
114 |
name_id = '7d6a86ae70f746f4887f22bad212f836'
|
|
115 |
UserSAMLIdentifier.objects.create(user=user, name_id=name_id)
|
|
116 |
return name_id
|
|
117 |
|
109 |
118 |
@pytest.fixture(params=['orig', 'sign_key'])
|
110 |
119 |
def key(request, settings):
|
111 |
120 |
if request.param == 'orig':
|
... | ... | |
245 |
254 |
'/test_basket_cell/'
|
246 |
255 |
|
247 |
256 |
|
248 |
|
def test_add_amount_to_basket(app, key, regie, user):
|
|
257 |
def test_add_amount_to_basket(app, key, regie, user_name_id):
|
249 |
258 |
payment_backend = PaymentBackend.objects.create(
|
250 |
259 |
label='test2', slug='test2', service='dummy', service_options={'siret': '1234'})
|
251 |
260 |
other_regie = Regie(label='test2', slug='test2', payment_backend=payment_backend)
|
252 |
261 |
other_regie.save()
|
253 |
262 |
|
254 |
|
user_email = 'foo@example.com'
|
255 |
|
User.objects.get_or_create(email=user_email)
|
256 |
|
|
257 |
263 |
data = {'display_name': 'test amount',
|
258 |
264 |
'url': 'http://example.com'}
|
259 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
265 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
260 |
266 |
url = sign_url(url, key)
|
261 |
267 |
resp = app.post_json(url, params=data, status=400)
|
262 |
268 |
assert 'missing amount parameter' in resp.text
|
263 |
269 |
|
264 |
270 |
amount = 42
|
265 |
271 |
data['amount'] = amount
|
266 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), 'unknown@example.com')
|
|
272 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), 'unknown_id')
|
267 |
273 |
url = sign_url(url, key)
|
268 |
274 |
resp = app.post_json(url, params=data, status=400)
|
269 |
275 |
assert 'unknown user' in resp.text
|
270 |
276 |
|
271 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
277 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
272 |
278 |
url = sign_url(url, key)
|
273 |
279 |
resp = app.post_json(url, params=data)
|
274 |
280 |
assert resp.status_code == 200
|
... | ... | |
279 |
285 |
resp = app.post_json('%s&amount=10' % url, params=data, status=403) # bad signature
|
280 |
286 |
|
281 |
287 |
data['extra'] = {'amount': '22.22'}
|
282 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
288 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
283 |
289 |
url = sign_url(url, key)
|
284 |
290 |
resp = app.post_json(url, params=data)
|
285 |
291 |
assert resp.status_code == 200
|
... | ... | |
288 |
294 |
|
289 |
295 |
data['amount'] = [amount]
|
290 |
296 |
data['extra'] = {'amount': ['22.22', '12']}
|
291 |
|
url = '%s?email=%s&orig=wcs&amount=5' % (reverse('api-add-basket-item'), user_email)
|
|
297 |
url = '%s?NameId=%s&orig=wcs&amount=5' % (reverse('api-add-basket-item'), user_name_id)
|
292 |
298 |
url = sign_url(url, key)
|
293 |
299 |
resp = app.post_json(url, params=data)
|
294 |
300 |
assert resp.status_code == 200
|
... | ... | |
296 |
302 |
assert BasketItem.objects.filter(amount=Decimal('81.22')).exists()
|
297 |
303 |
|
298 |
304 |
# accept french notation if settings.LANGUAGE_CODE is 'fr-*'
|
299 |
|
url = '%s?amount=10,00&email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
305 |
url = '%s?amount=10,00&NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
300 |
306 |
url = sign_url(url, key)
|
301 |
307 |
resp = app.post_json(url, params=data, status=400)
|
302 |
308 |
assert resp.json['err_desc'] == 'invalid value for "amount" in query string'
|
303 |
309 |
data['amount'] = '1,10'
|
304 |
|
url = '%s?amount=10.00&email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
310 |
url = '%s?amount=10.00&NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
305 |
311 |
url = sign_url(url, key)
|
306 |
312 |
resp = app.post_json(url, params=data, status=400)
|
307 |
313 |
assert resp.json['err_desc'] == 'invalid value for "amount" in payload'
|
... | ... | |
312 |
318 |
|
313 |
319 |
data['amount'] = '1,10'
|
314 |
320 |
data['extra'] = {'amount': '0,01'}
|
315 |
|
url = '%s?amount=10,00&email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
321 |
url = '%s?amount=10,00&NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
316 |
322 |
url = sign_url(url, key)
|
317 |
323 |
with override_settings(LANGUAGE_CODE='fr-be'):
|
318 |
324 |
resp = app.post_json(url, params=data, status=200)
|
... | ... | |
324 |
330 |
other_regie.save()
|
325 |
331 |
data['amount'] = []
|
326 |
332 |
data['extra'] = {'amount': '22.23'}
|
327 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
333 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
328 |
334 |
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
329 |
335 |
resp = app.post_json(url, params=data)
|
330 |
336 |
item = BasketItem.objects.get(amount=Decimal('22.23'))
|
... | ... | |
337 |
343 |
assert BasketItem.objects.filter(amount=Decimal('22.23')).exists()
|
338 |
344 |
assert BasketItem.objects.filter(amount=Decimal('22.23'))[0].regie_id == other_regie.id
|
339 |
345 |
|
340 |
|
url = '%s?email=%s®ie_id=%s' % (
|
341 |
|
reverse('api-add-basket-item'), user_email, regie.id)
|
|
346 |
url = '%s?NameId=%s®ie_id=%s' % (
|
|
347 |
reverse('api-add-basket-item'), user_name_id, regie.id)
|
342 |
348 |
data['extra'] = {'amount': '22.24', 'foo': 'bar'}
|
343 |
349 |
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
344 |
350 |
resp = app.post_json(url, params=data)
|
... | ... | |
348 |
354 |
assert BasketItem.objects.filter(amount=Decimal('22.24'))[0].regie_id == regie.id
|
349 |
355 |
assert BasketItem.objects.filter(amount=Decimal('22.24'))[0].request_data == data['extra']
|
350 |
356 |
|
351 |
|
url = '%s?email=%s®ie_id=%s' % (
|
352 |
|
reverse('api-add-basket-item'), user_email, regie.slug)
|
|
357 |
url = '%s?NameId=%s®ie_id=%s' % (
|
|
358 |
reverse('api-add-basket-item'), user_name_id, regie.slug)
|
353 |
359 |
data['extra'] = {'amount': '13.67'}
|
354 |
360 |
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
355 |
361 |
resp = app.post_json(url, params=data)
|
... | ... | |
358 |
364 |
assert BasketItem.objects.filter(amount=Decimal('13.67')).exists()
|
359 |
365 |
assert BasketItem.objects.filter(amount=Decimal('13.67'))[0].regie_id == regie.id
|
360 |
366 |
|
361 |
|
url = '%s?email=%s&orig=wcs®ie_id=%s' % (reverse('api-add-basket-item'), user_email, 'scarecrow')
|
|
367 |
url = '%s?NameId=%s&orig=wcs®ie_id=%s' % (reverse('api-add-basket-item'), user_name_id, 'scarecrow')
|
362 |
368 |
url = sign_url(url, key)
|
363 |
369 |
resp = app.post_json(url, params=data, status=400)
|
364 |
370 |
assert resp.json['err_desc'] == 'unknown regie'
|
365 |
371 |
|
366 |
372 |
|
367 |
|
def test_basket_item_with_capture_date(app, user, regie, basket_page, monkeypatch):
|
368 |
|
User.objects.get_or_create(email=user.email)
|
369 |
|
url = '%s?email=%s' % (reverse('api-add-basket-item'), user.email)
|
|
373 |
def test_basket_item_with_capture_date(app, user, user_name_id, regie, basket_page, monkeypatch):
|
|
374 |
url = '%s?NameId=%s' % (reverse('api-add-basket-item'), user_name_id)
|
370 |
375 |
capture_date = timezone.now().date()
|
371 |
376 |
data = {
|
372 |
377 |
'amount': 10, 'capture_date': capture_date.isoformat(),
|
... | ... | |
393 |
398 |
|
394 |
399 |
|
395 |
400 |
@pytest.mark.parametrize("invalid_capture_date", [8, '', 'not-a-date'])
|
396 |
|
def test_add_basket_capture_date_format(app, user, regie, invalid_capture_date):
|
397 |
|
url = '%s?email=%s' % (reverse('api-add-basket-item'), user.email)
|
|
401 |
def test_add_basket_capture_date_format(app, user_name_id, regie, invalid_capture_date):
|
|
402 |
url = '%s?NameId=%s' % (reverse('api-add-basket-item'), user_name_id)
|
398 |
403 |
data = {'amount': 10, 'display_name': 'test item'}
|
399 |
404 |
data['capture_date'] = invalid_capture_date
|
400 |
405 |
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
... | ... | |
402 |
407 |
assert resp.json['err_desc'] == 'bad format for capture date, it should be yyyy-mm-dd'
|
403 |
408 |
|
404 |
409 |
|
405 |
|
def test_add_basket_item_with_remote_regie(app, user, remote_regie):
|
|
410 |
def test_add_basket_item_with_remote_regie(app, user_name_id, remote_regie):
|
406 |
411 |
data = {'amount': 10, 'display_name': 'test item'}
|
407 |
|
url = '%s?email=%s' % (reverse('api-add-basket-item'), user.email)
|
|
412 |
url = '%s?NameId=%s' % (reverse('api-add-basket-item'), user_name_id)
|
408 |
413 |
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
409 |
414 |
resp = app.post_json(url, params=data, status=400)
|
410 |
415 |
assert resp.json['err_desc'] == 'can not add a basket item to a remote regie'
|
411 |
416 |
|
412 |
417 |
|
413 |
|
def test_add_basket_item_without_display_name(app, user, regie):
|
|
418 |
def test_add_basket_item_without_display_name(app, user_name_id, regie):
|
414 |
419 |
data = {'amount': '42',
|
415 |
420 |
'url': 'http://example.com'}
|
416 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user.email)
|
|
421 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
417 |
422 |
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
418 |
423 |
resp = app.post_json(url, params=data, status=400)
|
419 |
424 |
assert 'missing display_name parameter' in resp.text
|
... | ... | |
445 |
450 |
assert "Invalid grouping for basket items: different capture dates." in resp.text
|
446 |
451 |
|
447 |
452 |
|
448 |
|
def test_pay_single_basket_item(app, key, regie, user, john_doe):
|
|
453 |
def test_pay_single_basket_item(app, key, regie, user_name_id, john_doe):
|
449 |
454 |
page = Page(title='xxx', slug='index', template_name='standard')
|
450 |
455 |
page.save()
|
451 |
456 |
cell = LingoBasketCell(page=page, placeholder='content', order=0)
|
... | ... | |
455 |
460 |
data = {'amount': amount,
|
456 |
461 |
'display_name': 'test amount',
|
457 |
462 |
'url': 'http://example.com'}
|
458 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user.email)
|
|
463 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
459 |
464 |
url = sign_url(url, key)
|
460 |
465 |
resp = app.post_json(url, params=data)
|
461 |
466 |
# check that an unpaid item exists in basket
|
... | ... | |
497 |
502 |
assert_payment_status(resp.location, transaction_id=item.transaction_set.last().pk)
|
498 |
503 |
|
499 |
504 |
|
500 |
|
def test_pay_multiple_regies(app, key, regie, user):
|
501 |
|
test_add_amount_to_basket(app, key, regie, user)
|
|
505 |
def test_pay_multiple_regies(app, key, regie, user_name_id):
|
|
506 |
test_add_amount_to_basket(app, key, regie, user_name_id)
|
502 |
507 |
|
503 |
508 |
page = Page(title='xxx', slug='test_basket_cell', template_name='standard')
|
504 |
509 |
page.save()
|
... | ... | |
516 |
521 |
qs = urlparse.parse_qs(urlparse.urlparse(resp.location).query)
|
517 |
522 |
assert qs['amount'] == ['22.23']
|
518 |
523 |
|
519 |
|
def test_pay_as_anonymous_user(app, key, regie, user):
|
520 |
|
test_add_amount_to_basket(app, key, regie, user)
|
|
524 |
def test_pay_as_anonymous_user(app, key, regie, user_name_id):
|
|
525 |
test_add_amount_to_basket(app, key, regie, user_name_id)
|
521 |
526 |
|
522 |
527 |
page = Page(title='xxx', slug='test_basket_cell', template_name='standard')
|
523 |
528 |
page.save()
|
... | ... | |
529 |
534 |
resp = resp.forms[0].submit().follow()
|
530 |
535 |
assert 'Payment requires to be logged in.' in resp.text
|
531 |
536 |
|
532 |
|
def test_cancel_basket_item(app, key, regie, user):
|
533 |
|
user_email = 'foo@example.com'
|
534 |
|
User.objects.get_or_create(email=user_email)
|
535 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
537 |
def test_cancel_basket_item(app, key, regie, user_name_id):
|
|
538 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
536 |
539 |
url = sign_url(url, key)
|
537 |
540 |
data = {'amount': 42, 'display_name': 'test amount', 'url':
|
538 |
541 |
'http://example.com/', 'notify': 'true'}
|
... | ... | |
550 |
553 |
assert BasketItem.objects.filter(amount=21, cancellation_date__isnull=True).exists()
|
551 |
554 |
basket_item_id_2 = json.loads(resp.text)['id']
|
552 |
555 |
|
553 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
|
|
556 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_name_id)
|
554 |
557 |
url = sign_url(url, key)
|
555 |
558 |
data = {'notify': 'true'}
|
556 |
559 |
resp = app.post_json(url, params=data, status=400)
|
557 |
560 |
assert resp.json['err_desc'] == 'missing basket_item_id parameter'
|
558 |
561 |
|
559 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
|
|
562 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_name_id)
|
560 |
563 |
url = sign_url(url, key)
|
561 |
564 |
data = {'basket_item_id': 'eggs', 'notify': 'true'}
|
562 |
565 |
resp = app.post_json(url, params=data, status=400)
|
563 |
566 |
assert resp.json['err_desc'] == 'invalid basket_item_id'
|
564 |
567 |
|
565 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
|
|
568 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_name_id)
|
566 |
569 |
url = sign_url(url, key)
|
567 |
570 |
data = {'basket_item_id': 0, 'notify': 'true'}
|
568 |
571 |
resp = app.post_json(url, params=data, status=400)
|
... | ... | |
574 |
577 |
resp = app.post_json(url, params=data, status=400)
|
575 |
578 |
assert resp.json['err_desc'] == 'no user specified'
|
576 |
579 |
|
577 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), 'unknown@example.com')
|
|
580 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), 'unknown@example.com')
|
578 |
581 |
url = sign_url(url, key)
|
579 |
582 |
data = {'basket_item_id': basket_item_id, 'notify': 'true'}
|
580 |
583 |
resp = app.post_json(url, params=data, status=400)
|
581 |
584 |
assert resp.json['err_desc'] == 'unknown user'
|
582 |
585 |
|
583 |
|
other_user_email = 'bar@example.net'
|
584 |
|
User.objects.get_or_create(email=other_user_email)
|
585 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), other_user_email)
|
|
586 |
other_user, _ = User.objects.get_or_create(email='hop@example.com')
|
|
587 |
other_user_name_id = uuid.uuid4()
|
|
588 |
UserSAMLIdentifier.objects.get_or_create(user=other_user, name_id=other_user_name_id)
|
|
589 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), other_user_name_id)
|
586 |
590 |
url = sign_url(url, key)
|
587 |
591 |
data = {'basket_item_id': basket_item_id, 'notify': 'true'}
|
588 |
592 |
resp = app.post_json(url, params=data, status=400)
|
589 |
593 |
assert resp.json['err_desc'] == 'user does not own the basket item'
|
590 |
594 |
|
591 |
595 |
with mock.patch('combo.utils.requests_wrapper.RequestsSession.request') as request:
|
592 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
|
|
596 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_name_id)
|
593 |
597 |
url = sign_url(url, key)
|
594 |
598 |
data = {'basket_item_id': basket_item_id, 'notify': 'true'}
|
595 |
599 |
resp = app.post_json(url, params=data)
|
... | ... | |
598 |
602 |
assert BasketItem.objects.filter(amount=21, cancellation_date__isnull=True).exists()
|
599 |
603 |
|
600 |
604 |
with mock.patch('combo.utils.requests_wrapper.RequestsSession.request') as request:
|
601 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
|
|
605 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_name_id)
|
602 |
606 |
url = sign_url(url, key)
|
603 |
607 |
data = {'basket_item_id': basket_item_id_2}
|
604 |
608 |
resp = app.post_json(url, params=data)
|
... | ... | |
606 |
610 |
assert not BasketItem.objects.filter(amount=42, cancellation_date__isnull=True).exists()
|
607 |
611 |
assert not BasketItem.objects.filter(amount=21, cancellation_date__isnull=True).exists()
|
608 |
612 |
|
609 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email)
|
|
613 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_name_id)
|
610 |
614 |
url = sign_url(url, key)
|
611 |
615 |
data = {'basket_item_id': basket_item_id}
|
612 |
616 |
resp = app.post_json(url, params=data, status=400)
|
613 |
617 |
assert resp.json['err_desc'] == 'basket item already cancelled'
|
614 |
618 |
|
615 |
619 |
|
616 |
|
def test_cancel_basket_item_from_cell(app, key, regie, user):
|
|
620 |
def test_cancel_basket_item_from_cell(app, key, regie, user_name_id):
|
617 |
621 |
page = Page(title='xxx', slug='test_basket_cell', template_name='standard')
|
618 |
622 |
page.save()
|
619 |
623 |
cell = LingoBasketCell(page=page, placeholder='content', order=0)
|
620 |
624 |
cell.save()
|
621 |
625 |
|
622 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user.email)
|
|
626 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
623 |
627 |
url = sign_url(url, key)
|
624 |
628 |
data = {'amount': 42, 'display_name': 'test amount', 'url': 'http://example.org/testitem/'}
|
625 |
629 |
resp = app.post_json(url, params=data)
|
... | ... | |
642 |
646 |
assert BasketItem.objects.filter(id=basket_item_id, cancellation_date__isnull=False).exists()
|
643 |
647 |
|
644 |
648 |
# check removal of an item that is not cancellable
|
645 |
|
url = '%s?email=%s&cancellable=no&orig=wcs' % (reverse('api-add-basket-item'), user.email)
|
|
649 |
url = '%s?NameId=%s&cancellable=no&orig=wcs' % (reverse('api-add-basket-item'), user_name_id)
|
646 |
650 |
url = sign_url(url, key)
|
647 |
651 |
data = {'amount': 21, 'display_name': 'test amount',
|
648 |
652 |
'url': 'http://example.org/testitem/'}
|
... | ... | |
658 |
662 |
assert 'This item cannot be removed.' in resp.text
|
659 |
663 |
|
660 |
664 |
# check removal of the item of another user
|
661 |
|
user_email = 'bar@example.com'
|
662 |
|
User.objects.get_or_create(email=user_email)
|
663 |
|
url = '%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email)
|
|
665 |
other_user, _ = User.objects.get_or_create(email='hop@example.com')
|
|
666 |
other_user_name_id = uuid.uuid4()
|
|
667 |
UserSAMLIdentifier.objects.get_or_create(user=other_user, name_id=other_user_name_id)
|
|
668 |
url = '%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), other_user_name_id)
|
664 |
669 |
url = sign_url(url, key)
|
665 |
670 |
data = {'amount': 42, 'display_name': 'test amount', 'url': 'http://example.org/testitem/'}
|
666 |
671 |
resp = app.post_json(url, params=data)
|
... | ... | |
941 |
946 |
assert json.loads(resp.text)['err'] == 1
|
942 |
947 |
assert TransactionOperation.objects.filter(transaction=t1).count() == 1
|
943 |
948 |
|
944 |
|
def test_extra_fees(app, basket_page, key, regie, user):
|
|
949 |
def test_extra_fees(app, basket_page, key, regie, user_name_id):
|
945 |
950 |
regie.extra_fees_ws_url = 'http://www.example.net/extra-fees'
|
946 |
951 |
regie.save()
|
947 |
952 |
|
948 |
|
user_email = 'foo@example.com'
|
949 |
|
User.objects.get_or_create(email=user_email)
|
950 |
953 |
amount = 42
|
951 |
954 |
data = {'amount': amount, 'display_name': 'test amount'}
|
952 |
955 |
with mock.patch('combo.utils.requests_wrapper.RequestsSession.request') as request:
|
... | ... | |
954 |
957 |
mock_json.status_code = 200
|
955 |
958 |
mock_json.json.return_value = {'err': 0, 'data': [{'subject': 'Extra Fees', 'amount': '5'}]}
|
956 |
959 |
request.return_value = mock_json
|
957 |
|
url = sign_url('%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email), key)
|
|
960 |
url = sign_url('%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id), key)
|
958 |
961 |
resp = app.post_json(url, params=data)
|
959 |
962 |
assert resp.status_code == 200
|
960 |
963 |
assert json.loads(resp.text)['result'] == 'success'
|
... | ... | |
969 |
972 |
mock_json.json.return_value = {'err': 0, 'data': [{'subject': 'Extra Fees', 'amount': '7'}]}
|
970 |
973 |
request.return_value = mock_json
|
971 |
974 |
data['amount'] = 43
|
972 |
|
url = sign_url('%s?email=%s&orig=wcs' % (reverse('api-add-basket-item'), user_email), key)
|
|
975 |
url = sign_url('%s?NameId=%s&orig=wcs' % (reverse('api-add-basket-item'), user_name_id), key)
|
973 |
976 |
resp = app.post_json(url, params=data)
|
974 |
977 |
assert request.call_args[0] == ('POST', 'http://www.example.net/extra-fees')
|
975 |
978 |
assert len(json.loads(request.call_args[1]['data'])['data']) == 2
|
... | ... | |
984 |
987 |
mock_json.status_code = 200
|
985 |
988 |
mock_json.json.return_value = {'err': 0, 'data': [{'subject': 'Extra Fees', 'amount': '4'}]}
|
986 |
989 |
request.return_value = mock_json
|
987 |
|
url = sign_url('%s?email=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_email), key)
|
|
990 |
url = sign_url('%s?NameId=%s&orig=wcs' % (reverse('api-remove-basket-item'), user_name_id), key)
|
988 |
991 |
data = {'basket_item_id': BasketItem.objects.get(amount=43).id}
|
989 |
992 |
resp = app.post_json(url, params=data)
|
990 |
993 |
assert resp.status_code == 200
|
... | ... | |
1101 |
1104 |
|
1102 |
1105 |
|
1103 |
1106 |
@pytest.mark.parametrize("authenticated", [True, False])
|
1104 |
|
def test_payment_no_basket(app, user, regie, authenticated):
|
|
1107 |
def test_payment_no_basket(app, user_name_id, regie, authenticated):
|
1105 |
1108 |
url = reverse('api-add-basket-item')
|
1106 |
1109 |
source_url = 'http://example.org/item/1'
|
1107 |
1110 |
data = {'amount': 10, 'display_name': 'test item', 'url': source_url}
|
1108 |
1111 |
if authenticated:
|
1109 |
|
data['email'] = user.email
|
|
1112 |
data['NameId'] = user_name_id
|
1110 |
1113 |
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
1111 |
1114 |
resp = app.post_json(url, params=data)
|
1112 |
1115 |
assert resp.status_code == 200
|
1113 |
|
-
|