forked from CGM_Public/pretix_original
Add more tests
This commit is contained in:
@@ -1044,7 +1044,9 @@ class GiftCardPayment(BasePaymentProvider):
|
||||
messages.error(request, _("This gift card can not be redeemed since its code is not unique. Please contact the organizer of this event."))
|
||||
|
||||
def execute_payment(self, request: HttpRequest, payment: OrderPayment) -> str:
|
||||
for p in payment.order.positions.all():
|
||||
# This method will only be called when retrying payments, e.g. after a payment_prepare call. It is not called
|
||||
# during the order creation phase because this payment provider is a special case.
|
||||
for p in payment.order.positions.all(): # noqa - just a safeguard
|
||||
if p.item.issue_giftcard:
|
||||
raise PaymentException(_("You cannot pay with gift cards when buying a gift card."))
|
||||
|
||||
@@ -1053,13 +1055,11 @@ class GiftCardPayment(BasePaymentProvider):
|
||||
raise PaymentException("Invalid state, should never occur.")
|
||||
with transaction.atomic():
|
||||
gc = GiftCard.objects.select_for_update().get(pk=gcpk)
|
||||
if gc.currency != self.event.currency:
|
||||
if gc.currency != self.event.currency: # noqa - just a safeguard
|
||||
raise PaymentException(_("This gift card does not support this currency."))
|
||||
if not gc.accepted_by(self.event.organizer):
|
||||
if not gc.accepted_by(self.event.organizer): # noqa - just a safeguard
|
||||
raise PaymentException(_("This gift card is not accepted by this event organizer."))
|
||||
if gc.testmode != payment.order.testmode:
|
||||
raise PaymentException(_("Only the gift card or only the order are created in test mode."))
|
||||
if payment.amount > gc.value:
|
||||
if payment.amount > gc.value: # noqa - just a safeguard
|
||||
raise PaymentException(_("This gift card was used in the meantime. Please try again"))
|
||||
trans = gc.transactions.create(
|
||||
value=-1 * payment.amount,
|
||||
|
||||
@@ -569,14 +569,12 @@ def _get_fees(positions: List[CartPosition], payment_provider: BasePaymentProvid
|
||||
fees += resp
|
||||
total += sum(f.value for f in fees)
|
||||
|
||||
summed = 0
|
||||
gift_card_values = {}
|
||||
for gc in gift_cards:
|
||||
fval = Decimal(gc.value) # TODO: don't require an extra query
|
||||
fval = min(fval, total - summed)
|
||||
fval = min(fval, total)
|
||||
if fval > 0:
|
||||
total -= fval
|
||||
summed += fval
|
||||
gift_card_values[gc] = fval
|
||||
|
||||
if payment_provider:
|
||||
@@ -967,6 +965,7 @@ class OrderChangeManager:
|
||||
'seat_subevent_mismatch': _('You selected seat "{seat}" for a date that does not match the selected ticket date. Please choose a seat again.'),
|
||||
'seat_required': _('The selected product requires you to select a seat.'),
|
||||
'seat_forbidden': _('The selected product does not allow to select a seat.'),
|
||||
'gift_card_change': _('You cannot change the price of a position that has been used to issue a gift card.'),
|
||||
}
|
||||
ItemOperation = namedtuple('ItemOperation', ('position', 'item', 'variation'))
|
||||
SubeventOperation = namedtuple('SubeventOperation', ('position', 'subevent'))
|
||||
@@ -1034,6 +1033,9 @@ class OrderChangeManager:
|
||||
def change_price(self, position: OrderPosition, price: Decimal):
|
||||
price = position.item.tax(price, base_price_is='gross')
|
||||
|
||||
if position.issued_gift_cards.exists():
|
||||
raise OrderError(self.error_messages['gift_card_change'])
|
||||
|
||||
self._totaldiff += price.gross - position.price
|
||||
|
||||
if self.order.event.settings.invoice_include_free or price.gross != Decimal('0.00') or position.price != Decimal('0.00'):
|
||||
@@ -1710,13 +1712,14 @@ def signal_listener_issue_giftcards(sender: Event, order: Order, **kwargs):
|
||||
issued = Decimal('0.00')
|
||||
for gc in p.issued_gift_cards.all():
|
||||
issued += gc.transactions.first().value
|
||||
gc = sender.organizer.issued_gift_cards.create(
|
||||
currency=sender.currency, issued_in=p, testmode=order.testmode
|
||||
)
|
||||
gc.transactions.create(value=p.price - issued, order=order)
|
||||
any_giftcards = True
|
||||
p.secret = gc.secret
|
||||
p.save(update_fields=['secret'])
|
||||
if p.price - issued > 0:
|
||||
gc = sender.organizer.issued_gift_cards.create(
|
||||
currency=sender.currency, issued_in=p, testmode=order.testmode
|
||||
)
|
||||
gc.transactions.create(value=p.price - issued, order=order)
|
||||
any_giftcards = True
|
||||
p.secret = gc.secret
|
||||
p.save(update_fields=['secret'])
|
||||
|
||||
if any_giftcards:
|
||||
tickets.invalidate_cache.apply_async(kwargs={'event': sender.pk, 'order': order.pk})
|
||||
|
||||
@@ -52,8 +52,7 @@
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{% url "control:organizer.giftcard" organizer=request.organizer.slug giftcard=g.id %}">
|
||||
<strong>{{ g.secret }}</strong>
|
||||
</a>
|
||||
<strong>{{ g.secret }}</strong></a>
|
||||
{% if g.testmode %}
|
||||
<span class="label label-warning">{% trans "TEST MODE" %}</span>
|
||||
{% endif %}
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<div class="panel-group" id="payment_accordion">
|
||||
{# TODO: make this proper #}
|
||||
{% for p in providers %}
|
||||
<div class="panel panel-default" data-total="{{ p.total|floatformat:2 }}">
|
||||
<label class="accordion-radio">
|
||||
|
||||
@@ -23,6 +23,7 @@ from pretix.base.services.orders import (
|
||||
OrderChangeManager, OrderError, _create_order, approve_order, cancel_order,
|
||||
deny_order, expire_orders, send_download_reminders, send_expiry_warnings,
|
||||
)
|
||||
from pretix.plugins.banktransfer.payment import BankTransfer
|
||||
from pretix.testutils.scope import classscope
|
||||
|
||||
|
||||
@@ -921,6 +922,13 @@ class OrderChangeManagerTests(TestCase):
|
||||
with self.assertRaises(OrderError):
|
||||
self.ocm.commit()
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_change_price_issued_giftcard_used(self):
|
||||
gc = self.o.issued_gift_cards.create(currency="EUR", issued_in=self.op1)
|
||||
gc.transactions.create(value=20)
|
||||
with self.assertRaises(OrderError):
|
||||
self.ocm.change_price(self.op1, 25)
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_cancel_all_in_order(self):
|
||||
self.ocm.cancel(self.op1)
|
||||
@@ -1950,3 +1958,172 @@ def test_autocheckin(clist_autocheckin, event):
|
||||
locale='de')[0]
|
||||
assert clist_autocheckin.auto_checkin_sales_channels == []
|
||||
assert order.positions.first().checkins.count() == 0
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_giftcard_multiple(event):
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
gc1 = event.organizer.issued_gift_cards.create(currency="EUR")
|
||||
gc1.transactions.create(value=12)
|
||||
gc2 = event.organizer.issued_gift_cards.create(currency="EUR")
|
||||
gc2.transactions.create(value=12)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[gc1.pk, gc2.pk])[0]
|
||||
assert order.payments.count() == 3
|
||||
assert order.payments.get(info__icontains=gc1.pk).amount == Decimal('12.00')
|
||||
assert order.payments.get(info__icontains=gc2.pk).amount == Decimal('11.00')
|
||||
assert gc1.value == 0
|
||||
assert gc2.value == 1
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_giftcard_partial(event):
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
gc1 = event.organizer.issued_gift_cards.create(currency="EUR")
|
||||
gc1.transactions.create(value=12)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[gc1.pk])[0]
|
||||
assert order.payments.count() == 2
|
||||
assert order.payments.get(info__icontains=gc1.pk).amount == Decimal('12.00')
|
||||
assert order.payments.get(provider='banktransfer').amount == Decimal('11.00')
|
||||
assert gc1.value == 0
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_giftcard_payment_fee(event):
|
||||
event.settings.set('payment_banktransfer__fee_percent', Decimal('10.00'))
|
||||
event.settings.set('payment_banktransfer__fee_reverse_calc', False)
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
gc1 = event.organizer.issued_gift_cards.create(currency="EUR")
|
||||
gc1.transactions.create(value=12)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[gc1.pk])[0]
|
||||
assert order.payments.count() == 2
|
||||
assert order.payments.get(info__icontains=gc1.pk).amount == Decimal('12.00')
|
||||
assert order.payments.get(provider='banktransfer').amount == Decimal('12.10')
|
||||
assert order.fees.get().value == Decimal('1.10')
|
||||
assert gc1.value == 0
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_giftcard_invalid_currency(event):
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
gc1 = event.organizer.issued_gift_cards.create(currency="USD")
|
||||
gc1.transactions.create(value=12)
|
||||
with pytest.raises(OrderError):
|
||||
_create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[gc1.pk])[0]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_giftcard_invalid_organizer(event):
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
o2 = Organizer.objects.create(slug="foo", name="bar")
|
||||
gc1 = o2.issued_gift_cards.create(currency="EUR")
|
||||
gc1.transactions.create(value=12)
|
||||
with pytest.raises(OrderError):
|
||||
_create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[gc1.pk])[0]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_giftcard_test_mode_invalid(event):
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
gc1 = event.organizer.issued_gift_cards.create(currency="EUR", testmode=True)
|
||||
gc1.transactions.create(value=12)
|
||||
with pytest.raises(OrderError):
|
||||
_create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[gc1.pk])[0]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_giftcard_test_mode_event(event):
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
event.testmode = True
|
||||
event.save()
|
||||
gc1 = event.organizer.issued_gift_cards.create(currency="EUR", testmode=False)
|
||||
gc1.transactions.create(value=12)
|
||||
with pytest.raises(OrderError):
|
||||
_create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[gc1.pk])[0]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_giftcard_swap(event):
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket', issue_giftcard=True,
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
gc1 = event.organizer.issued_gift_cards.create(currency="EUR", testmode=False)
|
||||
gc1.transactions.create(value=12)
|
||||
with pytest.raises(OrderError):
|
||||
_create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[gc1.pk])[0]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_issue_when_paid_and_changed(event):
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket', issue_giftcard=True,
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
cp1 = CartPosition.objects.create(
|
||||
item=ticket, price=23, expires=now() + timedelta(days=1), event=event, cart_id="123"
|
||||
)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(), payment_provider=BankTransfer(event),
|
||||
locale='de', gift_cards=[])[0]
|
||||
op = order.positions.first()
|
||||
assert not op.issued_gift_cards.exists()
|
||||
op.payments.first().confirm()
|
||||
gc1 = op.issued_gift_cards.get()
|
||||
assert gc1.value == op.price
|
||||
op.refresh_from_db()
|
||||
assert op.secret == gc1.secret
|
||||
|
||||
ocm = OrderChangeManager(order)
|
||||
ocm.add_position(ticket, None, Decimal('12.00'))
|
||||
ocm.commit()
|
||||
order.payments.create(
|
||||
provider='manual', amount=order.pending_sum
|
||||
).confirm()
|
||||
|
||||
assert op.issued_gift_cards.count() == 1
|
||||
op2 = order.positions.last()
|
||||
gc2 = op2.issued_gift_cards.get()
|
||||
assert gc2.value == op2.price
|
||||
|
||||
@@ -943,9 +943,36 @@ class CheckoutTestCase(BaseCheckoutTestCase, TestCase):
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
print(response.rendered_content)
|
||||
assert 'This gift card is not known.' in response.rendered_content
|
||||
|
||||
def test_giftcard_cross_organizer(self):
|
||||
self.orga.issued_gift_cards.create(currency="EUR")
|
||||
orga2 = Organizer.objects.create(slug="foo2", name="foo2")
|
||||
gc = orga2.issued_gift_cards.create(currency="EUR")
|
||||
gc.transactions.create(value=23)
|
||||
self.orga.gift_card_issuer_acceptance.create(issuer=orga2)
|
||||
self.event.settings.set('payment_banktransfer__enabled', True)
|
||||
with scopes_disabled():
|
||||
CartPosition.objects.create(
|
||||
event=self.event, cart_id=self.session_key, item=self.ticket,
|
||||
price=23, expires=now() + timedelta(minutes=10)
|
||||
)
|
||||
response = self.client.post('/%s/%s/checkout/payment/' % (self.orga.slug, self.event.slug), {
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}, follow=True)
|
||||
self.assertRedirects(response, '/%s/%s/checkout/confirm/' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
assert '-€23.00' in response.rendered_content
|
||||
assert '0.00' in response.rendered_content
|
||||
|
||||
response = self.client.post('/%s/%s/checkout/confirm/' % (self.orga.slug, self.event.slug), follow=True)
|
||||
doc = BeautifulSoup(response.rendered_content, "lxml")
|
||||
self.assertEqual(len(doc.select(".thank-you")), 1)
|
||||
with scopes_disabled():
|
||||
o = Order.objects.last()
|
||||
assert o.payments.get(provider='giftcard').amount == Decimal('23.00')
|
||||
|
||||
def test_giftcard_in_test_mode(self):
|
||||
gc = self.orga.issued_gift_cards.create(currency="EUR")
|
||||
gc.transactions.create(value=20)
|
||||
|
||||
@@ -874,7 +874,7 @@ class OrdersTest(BaseOrdersTest):
|
||||
)
|
||||
assert 'Test dummy' in response.rendered_content
|
||||
assert '+ €12.00' in response.rendered_content
|
||||
response = self.client.post(
|
||||
self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'testdummy'
|
||||
@@ -893,6 +893,171 @@ class OrdersTest(BaseOrdersTest):
|
||||
assert self.order.total == Decimal('23.00') + fee.value
|
||||
assert self.order.invoices.count() == 3
|
||||
|
||||
def test_change_paymentmethod_giftcard_partial(self):
|
||||
with scopes_disabled():
|
||||
self.order.payments.create(
|
||||
provider='manual',
|
||||
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
|
||||
amount=Decimal('10.00'),
|
||||
)
|
||||
gc = self.orga.issued_gift_cards.create(currency="EUR")
|
||||
gc.transactions.create(value=10)
|
||||
response = self.client.get(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
)
|
||||
assert 'Gift card' in response.rendered_content
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
with scopes_disabled():
|
||||
p = self.order.payments.last()
|
||||
self.assertRedirects(
|
||||
response,
|
||||
'/%s/%s/order/%s/%s/pay/%s/confirm' % (self.orga.slug, self.event.slug, self.order.code,
|
||||
self.order.secret, p.pk),
|
||||
)
|
||||
self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/%s/confirm' % (self.orga.slug, self.event.slug, self.order.code,
|
||||
self.order.secret, p.pk),
|
||||
{}
|
||||
)
|
||||
self.order.refresh_from_db()
|
||||
p.refresh_from_db()
|
||||
assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED
|
||||
assert self.order.status == Order.STATUS_PENDING
|
||||
assert gc.value == Decimal('0.00')
|
||||
assert self.order.pending_sum == Decimal('3.00')
|
||||
|
||||
def test_change_paymentmethod_giftcard_swap_card(self):
|
||||
with scopes_disabled():
|
||||
self.order.payments.create(
|
||||
provider='manual',
|
||||
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
|
||||
amount=Decimal('10.00'),
|
||||
)
|
||||
gc = self.orga.issued_gift_cards.create(currency="EUR")
|
||||
gc.transactions.create(value=10)
|
||||
self.ticket.issue_giftcard = True
|
||||
self.ticket.save()
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "You cannot pay with gift cards when buying a gift card." in response.rendered_content
|
||||
|
||||
def test_change_paymentmethod_giftcard_wrong_currency(self):
|
||||
with scopes_disabled():
|
||||
gc = self.orga.issued_gift_cards.create(currency="USD")
|
||||
gc.transactions.create(value=10)
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "This gift card does not support this currency." in response.rendered_content
|
||||
|
||||
def test_change_paymentmethod_giftcard_in_test_mode(self):
|
||||
with scopes_disabled():
|
||||
self.order.testmode = True
|
||||
self.order.save()
|
||||
gc = self.orga.issued_gift_cards.create(currency="EUR")
|
||||
gc.transactions.create(value=10)
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "Only test gift cards can be used in test mode." in response.rendered_content
|
||||
|
||||
def test_change_paymentmethod_giftcard_not_in_test_mode(self):
|
||||
with scopes_disabled():
|
||||
gc = self.orga.issued_gift_cards.create(currency="EUR", testmode=True)
|
||||
gc.transactions.create(value=10)
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "This gift card can only be used in test mode." in response.rendered_content
|
||||
|
||||
def test_change_paymentmethod_giftcard_empty(self):
|
||||
with scopes_disabled():
|
||||
gc = self.orga.issued_gift_cards.create(currency="EUR")
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "All credit on this gift card has been used." in response.rendered_content
|
||||
|
||||
def test_change_paymentmethod_giftcard_wrong_organizer(self):
|
||||
with scopes_disabled():
|
||||
o = Organizer.objects.create(slug='Foo', name='bar')
|
||||
self.orga.issued_gift_cards.create(currency="EUR")
|
||||
gc = o.issued_gift_cards.create(currency="EUR")
|
||||
gc.transactions.create(value=10)
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
assert "This gift card is not known." in response.rendered_content
|
||||
|
||||
def test_change_paymentmethod_giftcard(self):
|
||||
with scopes_disabled():
|
||||
self.order.payments.create(
|
||||
provider='manual',
|
||||
state=OrderPayment.PAYMENT_STATE_CONFIRMED,
|
||||
amount=Decimal('10.00'),
|
||||
)
|
||||
gc = self.orga.issued_gift_cards.create(currency="EUR")
|
||||
gc.transactions.create(value=100)
|
||||
response = self.client.get(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
)
|
||||
assert 'Gift card' in response.rendered_content
|
||||
response = self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/change' % (self.orga.slug, self.event.slug, self.order.code, self.order.secret),
|
||||
{
|
||||
'payment': 'giftcard',
|
||||
'giftcard': gc.secret
|
||||
}
|
||||
)
|
||||
with scopes_disabled():
|
||||
p = self.order.payments.last()
|
||||
self.assertRedirects(
|
||||
response,
|
||||
'/%s/%s/order/%s/%s/pay/%s/confirm' % (self.orga.slug, self.event.slug, self.order.code,
|
||||
self.order.secret, p.pk),
|
||||
)
|
||||
self.client.post(
|
||||
'/%s/%s/order/%s/%s/pay/%s/confirm' % (self.orga.slug, self.event.slug, self.order.code,
|
||||
self.order.secret, p.pk),
|
||||
{}
|
||||
)
|
||||
self.order.refresh_from_db()
|
||||
p.refresh_from_db()
|
||||
assert p.state == OrderPayment.PAYMENT_STATE_CONFIRMED
|
||||
assert self.order.status == Order.STATUS_PAID
|
||||
assert gc.value == Decimal('87.00')
|
||||
|
||||
def test_answer_download_token(self):
|
||||
with scopes_disabled():
|
||||
q = self.event.questions.create(question="Foo", type="F")
|
||||
|
||||
Reference in New Issue
Block a user