Vouchers: Allow to set all addons or bundles as included (#3322)

Co-authored-by: Richard Schreiber <schreiber@rami.io>
This commit is contained in:
Raphael Michel
2023-05-22 11:59:27 +02:00
committed by GitHub
parent 5eff9a86f4
commit c75c080c5c
19 changed files with 241 additions and 23 deletions

View File

@@ -28,7 +28,7 @@ from django.utils.timezone import now
from django_scopes import scopes_disabled
from pretix.base.models import (
CartPosition, Event, Item, OrderPosition, Organizer, Quota,
CartPosition, Event, Item, OrderPosition, Organizer, Quota, Voucher,
)
from pretix.base.services.orders import _perform_order
from pretix.testutils.sessions import get_cart_session_key
@@ -116,6 +116,47 @@ class BundlePricesTest(TestCase):
assert op2.item == self.food
assert op2.tax_rate == Decimal('7.00')
def test_voucher_includes_bundles(self):
with scopes_disabled():
v = Voucher.objects.create(item=self.ticket, value=Decimal('0.00'), event=self.event, price_mode='set',
all_bundles_included=True)
# Verify correct price displayed on event page
response = self.client.get('/%s/%s/' % (self.orga.slug, self.event.slug))
self.assertContains(response, '23.00')
# Verify correct price being added to cart
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
'item_%d' % self.ticket.id: '1',
'_voucher_code': v.code
}, follow=True)
with scopes_disabled():
cp1 = CartPosition.objects.get(is_bundled=False)
cp2 = CartPosition.objects.get(is_bundled=True)
assert cp1.price == Decimal('0.00')
assert cp1.item == self.ticket
assert cp2.price == Decimal('0.00')
assert cp2.item == self.food
# Make sure cart expires
cp1.expires = now() - datetime.timedelta(minutes=120)
cp1.save()
cp2.expires = now() - datetime.timedelta(minutes=120)
cp2.save()
# Verify price is kept if cart expires and order is sent
with scopes_disabled():
_perform_order(self.event, self._manual_payment(), [cp1.pk, cp2.pk], 'admin@example.org', 'en', None, {}, 'web')
op1 = OrderPosition.objects.get(is_bundled=False)
op2 = OrderPosition.objects.get(is_bundled=True)
assert op1.price == Decimal('0.00')
assert op1.item == self.ticket
assert op1.tax_rate == Decimal('19.00')
assert op2.price == Decimal('0.00')
assert op2.item == self.food
assert op2.tax_rate == Decimal('7.00')
def test_net_price_definitions(self):
self.tr19.price_includes_tax = False
self.tr19.save()