Add more tests

This commit is contained in:
Raphael Michel
2019-10-18 15:11:53 +02:00
parent 2c87d5ece3
commit 8fe9b35dea
8 changed files with 393 additions and 21 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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")