mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
New implementation of sales channels (#4111)
Co-authored-by: Martin Gross <gross@rami.io>
This commit is contained in:
@@ -47,6 +47,7 @@ class EventCancelTests(TestCase):
|
||||
code='FOO', event=self.event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=Decimal('46.00'),
|
||||
)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
@@ -495,6 +496,7 @@ class SubEventCancelTests(TestCase):
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal('46.00'),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
|
||||
@@ -68,6 +68,7 @@ def position(event, item):
|
||||
datetime=now() - timedelta(days=4),
|
||||
expires=now() - timedelta(hours=4) + timedelta(days=10),
|
||||
total=Decimal('23.00'),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
return OrderPosition.objects.create(
|
||||
order=order, item=item, variation=None,
|
||||
|
||||
@@ -49,6 +49,7 @@ def test_full_clone_same_organizer():
|
||||
organizer = Organizer.objects.create(name='Dummy', slug='dummy')
|
||||
membership_type = organizer.membership_types.create(name="Membership")
|
||||
plan = SeatingPlan.objects.create(name="Plan", organizer=organizer, layout="{}")
|
||||
sc = organizer.sales_channels.get(identifier="web")
|
||||
|
||||
event = Event.objects.create(
|
||||
organizer=organizer, name='Dummy', slug='dummy',
|
||||
@@ -57,7 +58,9 @@ def test_full_clone_same_organizer():
|
||||
date_to=now() + timedelta(hours=1),
|
||||
testmode=True,
|
||||
seating_plan=plan,
|
||||
all_sales_channels=False,
|
||||
)
|
||||
event.limit_sales_channels.add(sc)
|
||||
|
||||
item_meta = event.item_meta_properties.create(name="Bla")
|
||||
tax_rule = event.tax_rules.create(name="VAT", rate=19)
|
||||
@@ -67,13 +70,16 @@ def test_full_clone_same_organizer():
|
||||
q2 = event.quotas.create(name="Quota 2", size=0, closed=True)
|
||||
|
||||
item1 = event.items.create(category=category, tax_rule=tax_rule, name="Ticket", default_price=23,
|
||||
grant_membership_type=membership_type, hidden_if_available=q2)
|
||||
grant_membership_type=membership_type, hidden_if_available=q2,
|
||||
all_sales_channels=False)
|
||||
item1.limit_sales_channels.add(sc)
|
||||
# todo: test that item pictures are copied, not linked
|
||||
ItemMetaValue.objects.create(item=item1, property=item_meta, value="Foo")
|
||||
assert item1.meta_data
|
||||
item2 = event.items.create(category=category, tax_rule=tax_rule, name="T-shirt", default_price=15,
|
||||
hidden_if_item_available=item1)
|
||||
item2v = item2.variations.create(value="red", default_price=15)
|
||||
item2v = item2.variations.create(value="red", default_price=15, all_sales_channels=False)
|
||||
item2v.limit_sales_channels.add(sc)
|
||||
item2v.meta_values.create(property=item_meta, value="Bar")
|
||||
item2.require_membership_types.add(membership_type)
|
||||
ItemAddOn.objects.create(base_item=item1, addon_category=category)
|
||||
@@ -117,6 +123,7 @@ def test_full_clone_same_organizer():
|
||||
],
|
||||
})
|
||||
clist.limit_products.add(item1)
|
||||
clist.auto_checkin_sales_channels.add(sc)
|
||||
|
||||
copied_event = Event.objects.create(
|
||||
organizer=organizer, name='Dummy2', slug='dummy2',
|
||||
@@ -129,6 +136,7 @@ def test_full_clone_same_organizer():
|
||||
# Verify event properties
|
||||
assert abs(copied_event.date_admission - (copied_event.date_from - timedelta(hours=1))) < timedelta(minutes=1)
|
||||
assert copied_event.testmode
|
||||
assert copied_event.limit_sales_channels.get() == sc
|
||||
|
||||
# Verify that we actually *copied*, not just moved objects over
|
||||
assert event.tax_rules.count() == copied_event.tax_rules.count() == 1
|
||||
@@ -139,6 +147,7 @@ def test_full_clone_same_organizer():
|
||||
assert event.questions.count() == copied_event.questions.count() == 2
|
||||
assert event.seat_category_mappings.count() == copied_event.seat_category_mappings.count() == 1
|
||||
assert event.seats.count() == copied_event.seats.count() == 1
|
||||
assert event.limit_sales_channels.get() == sc
|
||||
|
||||
# Verify relationship integrity
|
||||
copied_q1 = copied_event.quotas.get(name=q1.name)
|
||||
@@ -148,11 +157,14 @@ def test_full_clone_same_organizer():
|
||||
copied_item2 = copied_event.items.get(name=item2.name)
|
||||
assert copied_item1.tax_rule == copied_event.tax_rules.get()
|
||||
assert copied_item1.category == copied_event.categories.get()
|
||||
assert copied_item1.limit_sales_channels.get() == sc
|
||||
assert copied_item1.meta_data == item1.meta_data
|
||||
assert copied_item2.variations.get().meta_data == item2v.meta_data
|
||||
assert copied_item1.hidden_if_available == copied_q2
|
||||
assert copied_item1.grant_membership_type == membership_type
|
||||
assert copied_item2.variations.count() == 1
|
||||
assert copied_item2.variations.get().limit_sales_channels.get() == sc
|
||||
assert copied_item2.require_membership_types.count() == 1
|
||||
assert copied_item2.require_membership_types.get() == membership_type
|
||||
assert copied_item1.addons.get().addon_category == copied_event.categories.get()
|
||||
assert copied_item1.bundles.get().bundled_item == copied_item2
|
||||
@@ -194,6 +206,7 @@ def test_full_clone_same_organizer():
|
||||
],
|
||||
}
|
||||
assert copied_clist.limit_products.get() == copied_item1
|
||||
assert copied_clist.auto_checkin_sales_channels.get() == sc
|
||||
|
||||
# todo: test that the plugin hook is called
|
||||
# todo: test custom style
|
||||
@@ -208,6 +221,8 @@ def test_full_clone_cross_organizer_differences():
|
||||
organizer2 = Organizer.objects.create(name='Dummy2', slug='dummy2')
|
||||
membership_type = organizer.membership_types.create(name="Membership")
|
||||
plan = SeatingPlan.objects.create(name="Plan", organizer=organizer, layout="{}")
|
||||
sc = organizer.sales_channels.get(identifier="web")
|
||||
sc2 = organizer2.sales_channels.get(identifier="web")
|
||||
|
||||
event = Event.objects.create(
|
||||
organizer=organizer, name='Dummy', slug='dummy',
|
||||
@@ -216,13 +231,20 @@ def test_full_clone_cross_organizer_differences():
|
||||
date_to=now() + timedelta(hours=1),
|
||||
testmode=True,
|
||||
seating_plan=plan,
|
||||
all_sales_channels=False,
|
||||
)
|
||||
event.limit_sales_channels.add(sc)
|
||||
|
||||
item1 = event.items.create(name="Ticket", default_price=23,
|
||||
grant_membership_type=membership_type)
|
||||
grant_membership_type=membership_type,
|
||||
all_sales_channels=False)
|
||||
item1.limit_sales_channels.add(sc)
|
||||
item2 = event.items.create(name="T-shirt", default_price=15)
|
||||
item2.require_membership_types.add(membership_type)
|
||||
|
||||
clist = event.checkin_lists.create(name="Default")
|
||||
clist.auto_checkin_sales_channels.add(sc)
|
||||
|
||||
copied_event = Event.objects.create(
|
||||
organizer=organizer2, name='Dummy2', slug='dummy2',
|
||||
date_from=datetime.datetime(2022, 4, 15, 9, 0, 0, tzinfo=datetime.timezone.utc),
|
||||
@@ -234,9 +256,14 @@ def test_full_clone_cross_organizer_differences():
|
||||
assert organizer2.seating_plans.count() == 1
|
||||
assert organizer2.seating_plans.get().layout == plan.layout
|
||||
assert copied_event.seating_plan.organizer == organizer2
|
||||
assert copied_event.limit_sales_channels.get() == sc2
|
||||
assert event.seating_plan.organizer == organizer
|
||||
|
||||
copied_item1 = copied_event.items.get(name=item1.name)
|
||||
copied_item2 = copied_event.items.get(name=item2.name)
|
||||
assert copied_item1.grant_membership_type is None
|
||||
assert copied_item2.require_membership_types.count() == 0
|
||||
assert copied_item1.limit_sales_channels.get() == sc2
|
||||
|
||||
copied_clist = copied_event.checkin_lists.get()
|
||||
assert copied_clist.auto_checkin_sales_channels.get() == sc2
|
||||
|
||||
@@ -66,7 +66,8 @@ def env():
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=0, locale='en'
|
||||
total=0, locale='en',
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
tr = event.tax_rules.create(rate=Decimal('19.00'))
|
||||
o.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('19.00'),
|
||||
@@ -442,7 +443,8 @@ def test_invoice_numbers(env):
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=0,
|
||||
locale='en'
|
||||
locale='en',
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
order2.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('0.00'),
|
||||
tax_value=Decimal('0.00'))
|
||||
@@ -451,7 +453,8 @@ def test_invoice_numbers(env):
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=0, testmode=True,
|
||||
locale='en'
|
||||
locale='en',
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
inv1 = generate_invoice(order)
|
||||
inv2 = generate_invoice(order)
|
||||
@@ -519,7 +522,8 @@ def test_invoice_number_prefixes(env):
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=0,
|
||||
locale='en'
|
||||
locale='en',
|
||||
sales_channel=event2.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
order2.fees.create(fee_type=OrderFee.FEE_TYPE_PAYMENT, value=Decimal('0.25'), tax_rate=Decimal('0.00'),
|
||||
tax_value=Decimal('0.00'))
|
||||
|
||||
@@ -366,6 +366,7 @@ def test_validate_membership_max_usages(event, customer, membership, requiring_t
|
||||
datetime=now() - timedelta(days=3),
|
||||
expires=now() + timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o1,
|
||||
@@ -446,6 +447,7 @@ def test_validate_membership_parallel(event, customer, membership, subevent, req
|
||||
datetime=now() - timedelta(days=3),
|
||||
expires=now() + timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o1,
|
||||
@@ -549,6 +551,7 @@ def test_validate_membership_parallel_validity_dynamic(event, customer, membersh
|
||||
datetime=now() - timedelta(days=3),
|
||||
expires=now() + timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o1,
|
||||
@@ -664,6 +667,7 @@ def test_validate_membership_parallel_validity_fixed(event, customer, membership
|
||||
datetime=now() - timedelta(days=3),
|
||||
expires=now() + timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o1,
|
||||
@@ -743,6 +747,7 @@ def test_use_membership(event, customer, membership, requiring_ticket):
|
||||
)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "banktransfer",
|
||||
@@ -790,6 +795,7 @@ def test_grant_when_paid_and_changed(event, customer, granting_ticket):
|
||||
q.items.add(granting_ticket)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=now(),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "banktransfer",
|
||||
|
||||
@@ -118,6 +118,7 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
self.quota.items.add(self.item1)
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
@@ -131,6 +132,7 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
OrderPosition.objects.create(order=order, item=self.item2, variation=self.var1, price=2)
|
||||
self.assertEqual(self.var1.check_quotas(), (Quota.AVAILABILITY_GONE, 0))
|
||||
@@ -140,12 +142,14 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
self.quota.items.add(self.item1)
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
self.assertEqual(self.item1.check_quotas(), (Quota.AVAILABILITY_OK, 1))
|
||||
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PENDING,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
self.assertEqual(self.item1.check_quotas(), (Quota.AVAILABILITY_ORDERED, 0))
|
||||
@@ -168,6 +172,7 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
OrderPosition.objects.create(order=order, item=self.item2, variation=self.var1, price=2)
|
||||
|
||||
@@ -180,6 +185,7 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
self.quota.save()
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
op = OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
self.assertEqual(self.item1.check_quotas(), (Quota.AVAILABILITY_OK, 2))
|
||||
@@ -194,12 +200,14 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
self.quota.save()
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
self.assertEqual(self.item1.check_quotas(), (Quota.AVAILABILITY_OK, 2))
|
||||
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PENDING,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
self.assertEqual(self.item1.check_quotas(), (Quota.AVAILABILITY_OK, 1))
|
||||
@@ -246,6 +254,7 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
self.quota.items.add(self.item1)
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=2)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
@@ -589,6 +598,7 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
# Create orders
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
total=6)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, price=2, blocked=["foo"])
|
||||
@@ -610,12 +620,14 @@ class QuotaTestCase(BaseQuotaTestCase):
|
||||
|
||||
# Create orders
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
expires=now() + timedelta(days=3),
|
||||
total=6)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, subevent=se1, price=2)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, subevent=se1, price=2)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, subevent=se2, price=2)
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PENDING,
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
expires=now() + timedelta(days=3),
|
||||
total=8)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, subevent=se1, price=2)
|
||||
@@ -686,6 +698,7 @@ class CheckinQuotaTestCase(BaseQuotaTestCase):
|
||||
self.quota.items.add(self.item1)
|
||||
self.cl = self.event.checkin_lists.create(name="Test", allow_entry_after_exit=False)
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
expires=now() + timedelta(days=3),
|
||||
total=4)
|
||||
self.op = OrderPosition.objects.create(order=order, item=self.item1, price=2)
|
||||
@@ -1071,14 +1084,18 @@ class VoucherTestCase(BaseQuotaTestCase):
|
||||
|
||||
order = Order.objects.create(
|
||||
status=Order.STATUS_PENDING, event=self.event,
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
datetime=now() - timedelta(days=5), expires=now() + timedelta(days=5), total=46,
|
||||
)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, voucher=v, price=Decimal('20.00'),
|
||||
voucher_budget_use=Decimal('3.00'))
|
||||
OrderPosition.objects.create(
|
||||
order=order, item=self.item1, voucher=v, price=Decimal('20.00'),
|
||||
voucher_budget_use=Decimal('3.00')
|
||||
)
|
||||
assert v.budget_used() == Decimal('3.00')
|
||||
|
||||
order = Order.objects.create(
|
||||
status=Order.STATUS_PAID, event=self.event,
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
datetime=now() - timedelta(days=5), expires=now() + timedelta(days=5), total=46,
|
||||
)
|
||||
OrderPosition.objects.create(order=order, item=self.item1, voucher=v, price=Decimal('20.00'),
|
||||
@@ -1095,6 +1112,7 @@ class OrderTestCase(BaseQuotaTestCase):
|
||||
status=Order.STATUS_PENDING, event=self.event,
|
||||
datetime=now() - timedelta(days=5),
|
||||
expires=now() + timedelta(days=5), total=46,
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.quota.items.add(self.item1)
|
||||
self.op1 = OrderPosition.objects.create(order=self.order, item=self.item1,
|
||||
@@ -2079,7 +2097,9 @@ class ItemTest(TestCase):
|
||||
i = Item.objects.create(
|
||||
event=self.event, name="Ticket", default_price=23,
|
||||
active=True, available_until=now() + timedelta(days=1),
|
||||
all_sales_channels=False,
|
||||
)
|
||||
i.limit_sales_channels.add(self.o.sales_channels.get(identifier="web"))
|
||||
assert Item.objects.filter_available().exists()
|
||||
assert not Item.objects.filter_available(channel='foo').exists()
|
||||
|
||||
@@ -2300,10 +2320,12 @@ class EventTest(TestCase):
|
||||
def test_active_quotas_annotation(self):
|
||||
event = Event.objects.create(
|
||||
organizer=self.organizer, name='Download', slug='download',
|
||||
date_from=now()
|
||||
date_from=now(),
|
||||
)
|
||||
q = Quota.objects.create(event=event, name='Quota', size=2)
|
||||
item = Item.objects.create(event=event, name='Early-bird ticket', default_price=0, active=True)
|
||||
item = Item.objects.create(event=event, name='Early-bird ticket', default_price=0, active=True,
|
||||
all_sales_channels=False)
|
||||
item.limit_sales_channels.add(self.organizer.sales_channels.get(identifier="web"))
|
||||
item2 = Item.objects.create(event=event, name='Early-bird ticket', default_price=0, active=False)
|
||||
q.items.add(item)
|
||||
q.items.add(item2)
|
||||
@@ -2407,8 +2429,9 @@ class EventTest(TestCase):
|
||||
)
|
||||
q = Quota.objects.create(event=event, name='Quota', size=2)
|
||||
item = Item.objects.create(event=event, name='Early-bird ticket', default_price=0, active=True)
|
||||
v = item.variations.create(value="foo")
|
||||
v = item.variations.create(value="foo", all_sales_channels=False)
|
||||
item.variations.create(value="bar")
|
||||
v.limit_sales_channels.add(self.organizer.sales_channels.get(identifier="web"))
|
||||
q.items.add(item)
|
||||
q.variations.add(v)
|
||||
assert Event.annotated(Event.objects).first().active_quotas == [q]
|
||||
@@ -2475,7 +2498,9 @@ class SubEventTest(TestCase):
|
||||
def test_active_quotas_annotation(self):
|
||||
q = Quota.objects.create(event=self.event, name='Quota', size=2,
|
||||
subevent=self.se)
|
||||
item = Item.objects.create(event=self.event, name='Early-bird ticket', default_price=0, active=True)
|
||||
item = Item.objects.create(event=self.event, name='Early-bird ticket', default_price=0, active=True,
|
||||
all_sales_channels=False)
|
||||
item.limit_sales_channels.add(self.organizer.sales_channels.get(identifier="web"))
|
||||
q.items.add(item)
|
||||
assert SubEvent.annotated(SubEvent.objects).first().active_quotas == [q]
|
||||
assert SubEvent.annotated(SubEvent.objects, 'foo').first().active_quotas == []
|
||||
@@ -2497,6 +2522,7 @@ class SubEventTest(TestCase):
|
||||
item = Item.objects.create(event=self.event, name='Early-bird ticket', default_price=0, active=True)
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event, email='dummy@dummy.test',
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
status=Order.STATUS_PAID,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal("30"), locale='en'
|
||||
@@ -2594,6 +2620,7 @@ class CheckinListTestCase(TestCase):
|
||||
self.cl_tickets.limit_products.add(self.item1)
|
||||
o = Order.objects.create(
|
||||
code='FOO1', event=self.event, email='dummy@dummy.test',
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
status=Order.STATUS_PAID,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal("30"), locale='en'
|
||||
@@ -2621,6 +2648,7 @@ class CheckinListTestCase(TestCase):
|
||||
|
||||
o = Order.objects.create(
|
||||
code='FOO2', event=self.event, email='dummy@dummy.test',
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal("30"), locale='en'
|
||||
@@ -2687,6 +2715,7 @@ class SeatingTestCase(TestCase):
|
||||
def test_blocked_in_proximity(self):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event, email='dummy@dummy.test', total=Decimal("30"),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
locale='en', status=Order.STATUS_PENDING, datetime=now(),
|
||||
expires=now() + timedelta(days=10),
|
||||
)
|
||||
@@ -2709,6 +2738,7 @@ class SeatingTestCase(TestCase):
|
||||
def test_order_pending(self):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event, email='dummy@dummy.test', total=Decimal("30"),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
locale='en', status=Order.STATUS_PENDING, datetime=now(),
|
||||
expires=now() + timedelta(days=10),
|
||||
)
|
||||
@@ -2723,6 +2753,7 @@ class SeatingTestCase(TestCase):
|
||||
def test_order_paid(self):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event, email='dummy@dummy.test', total=Decimal("30"),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
locale='en', status=Order.STATUS_PAID, datetime=now(),
|
||||
expires=now() + timedelta(days=10),
|
||||
)
|
||||
@@ -2737,6 +2768,7 @@ class SeatingTestCase(TestCase):
|
||||
def test_order_expired(self):
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event, email='dummy@dummy.test', total=Decimal("30"),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
locale='en', status=Order.STATUS_EXPIRED, datetime=now(),
|
||||
expires=now() + timedelta(days=10),
|
||||
)
|
||||
@@ -2772,6 +2804,7 @@ class SeatingTestCase(TestCase):
|
||||
self.seat_a1.save()
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event, email='dummy@dummy.test', total=Decimal("30"),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
locale='en', status=Order.STATUS_PAID, datetime=now(),
|
||||
expires=now() + timedelta(days=10),
|
||||
)
|
||||
@@ -2789,6 +2822,7 @@ class SeatingTestCase(TestCase):
|
||||
self.seat_a1.save()
|
||||
o = Order.objects.create(
|
||||
code='FOO', event=self.event, email='dummy@dummy.test', total=Decimal("30"),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
locale='en', status=Order.STATUS_CANCELED, datetime=now(),
|
||||
expires=now() + timedelta(days=10),
|
||||
)
|
||||
@@ -2982,9 +3016,15 @@ def test_subevent_date_updates_order_date():
|
||||
se1 = event.subevents.create(date_from=now(), name="SE 1")
|
||||
se2 = event.subevents.create(date_from=now(), name="SE 2")
|
||||
|
||||
order1 = Order.objects.create(event=event, status=Order.STATUS_PAID, expires=now() + timedelta(days=3), total=6)
|
||||
order1 = Order.objects.create(
|
||||
event=event, status=Order.STATUS_PAID, expires=now() + timedelta(days=3), total=6,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(order=order1, item=item1, subevent=se1, price=2)
|
||||
order2 = Order.objects.create(event=event, status=Order.STATUS_PAID, expires=now() + timedelta(days=3), total=6)
|
||||
order2 = Order.objects.create(
|
||||
event=event, status=Order.STATUS_PAID, expires=now() + timedelta(days=3), total=6,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(order=order2, item=item1, subevent=se2, price=2)
|
||||
|
||||
o1lm = order1.last_modified
|
||||
|
||||
@@ -50,6 +50,7 @@ def order(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
total=Decimal('46.00'),
|
||||
)
|
||||
tr19 = event.tax_rules.create(rate=Decimal('19.00'))
|
||||
|
||||
@@ -73,7 +73,8 @@ def event():
|
||||
|
||||
@pytest.fixture
|
||||
def clist_autocheckin(event):
|
||||
c = event.checkin_lists.create(name="Default", all_products=True, auto_checkin_sales_channels=['web'])
|
||||
c = event.checkin_lists.create(name="Default", all_products=True)
|
||||
c.auto_checkin_sales_channels.add(event.organizer.sales_channels.get(identifier="web"))
|
||||
return c
|
||||
|
||||
|
||||
@@ -83,6 +84,7 @@ def test_expiry_days(event):
|
||||
event.settings.set('payment_term_days', 5)
|
||||
event.settings.set('payment_term_weekdays', False)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
@@ -104,6 +106,7 @@ def test_expiry_weekdays(event):
|
||||
event.settings.set('payment_term_weekdays', True)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -120,6 +123,7 @@ def test_expiry_weekdays(event):
|
||||
today = make_aware(datetime(2016, 9, 19, 15, 0, 0, 0))
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -143,6 +147,7 @@ def test_expiry_minutes(event):
|
||||
event.settings.set('payment_term_weekdays', False)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -164,6 +169,7 @@ def test_expiry_last(event):
|
||||
event.settings.set('payment_term_weekdays', False)
|
||||
event.settings.set('payment_term_last', now() + timedelta(days=3))
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
@@ -178,6 +184,7 @@ def test_expiry_last(event):
|
||||
assert (order.expires - today).days == 3
|
||||
event.settings.set('payment_term_last', now() + timedelta(days=7))
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
@@ -204,6 +211,7 @@ def test_expiry_last_relative(event):
|
||||
))
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -244,6 +252,7 @@ def test_expiry_last_relative_subevents(event):
|
||||
))
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1, cp2],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -264,6 +273,7 @@ def test_expiry_dst(event):
|
||||
utc = ZoneInfo('UTC')
|
||||
today = datetime(2016, 10, 29, 12, 0, 0, tzinfo=tz).astimezone(utc)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
@@ -286,12 +296,14 @@ def test_expiring(event):
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=0,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
o2 = Order.objects.create(
|
||||
code='FO2', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=12,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
@@ -325,6 +337,7 @@ def test_expiring_paid_invoice(event):
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=12,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('12.00'), admission=True)
|
||||
@@ -358,6 +371,7 @@ def test_expire_twice(event):
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=12,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
generate_invoice(o2)
|
||||
expire_orders(None)
|
||||
@@ -380,6 +394,7 @@ def test_expire_skipped_if_canceled_with_fee(event):
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=12,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
o2.fees.create(fee_type=OrderFee.FEE_TYPE_CANCELLATION, value=12)
|
||||
generate_invoice(o2)
|
||||
@@ -396,12 +411,14 @@ def test_expiring_auto_disabled(event):
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=0,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
o2 = Order.objects.create(
|
||||
code='FO2', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=0,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
expire_orders(None)
|
||||
o1 = Order.objects.get(id=o1.id)
|
||||
@@ -422,6 +439,7 @@ def test_expiring_auto_delayed(event):
|
||||
datetime=datetime(2023, 6, 22, 12, 13, 14, tzinfo=zoneinfo.ZoneInfo("Europe/Berlin")),
|
||||
expires=datetime(2023, 6, 30, 23, 59, 59, tzinfo=zoneinfo.ZoneInfo("Europe/Berlin")),
|
||||
total=0,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
o2 = Order.objects.create(
|
||||
code='FO2', event=event, email='dummy@dummy.test',
|
||||
@@ -429,6 +447,7 @@ def test_expiring_auto_delayed(event):
|
||||
datetime=datetime(2023, 6, 22, 12, 13, 14, tzinfo=zoneinfo.ZoneInfo("Europe/Berlin")),
|
||||
expires=datetime(2023, 6, 28, 23, 59, 59, tzinfo=zoneinfo.ZoneInfo("Europe/Berlin")),
|
||||
total=0,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
assert o1.payment_term_expire_date == o1.expires + timedelta(days=2) # limited by term_last
|
||||
assert o2.payment_term_expire_date == o2.expires + timedelta(days=3)
|
||||
@@ -472,6 +491,7 @@ def test_expiring_auto_delayed_weekdays(event):
|
||||
datetime=datetime(2023, 6, 22, 12, 13, 14, tzinfo=zoneinfo.ZoneInfo("Europe/Berlin")),
|
||||
expires=datetime(2023, 6, 30, 23, 59, 59, tzinfo=zoneinfo.ZoneInfo("Europe/Berlin")),
|
||||
total=0,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
assert o1.payment_term_expire_date == o1.expires + timedelta(days=3)
|
||||
|
||||
@@ -482,13 +502,15 @@ def test_do_not_expire_if_approval_pending(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=0, require_approval=True
|
||||
total=0, require_approval=True,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
o2 = Order.objects.create(
|
||||
code='FO2', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=0,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
expire_orders(None)
|
||||
o1 = Order.objects.get(id=o1.id)
|
||||
@@ -505,7 +527,8 @@ def test_approve(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=10, require_approval=True, locale='en'
|
||||
total=10, require_approval=True, locale='en',
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
@@ -536,7 +559,8 @@ def test_approve_send_to_attendees(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=10, require_approval=True, locale='en'
|
||||
total=10, require_approval=True, locale='en',
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
ticket = Item.objects.create(event=event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
@@ -564,7 +588,8 @@ def test_approve_free(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=0, require_approval=True
|
||||
total=0, require_approval=True,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
approve_order(o1)
|
||||
o1.refresh_from_db()
|
||||
@@ -586,7 +611,8 @@ def test_approve_free_send_to_attendees(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=0, require_approval=True
|
||||
total=0, require_approval=True,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
ticket = Item.objects.create(event=event, name='Free ticket',
|
||||
default_price=Decimal('0.00'), admission=True)
|
||||
@@ -617,7 +643,8 @@ def test_approve_free_after_last_payment_date(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=0, require_approval=True
|
||||
total=0, require_approval=True,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
approve_order(o1)
|
||||
o1.refresh_from_db()
|
||||
@@ -636,7 +663,8 @@ def test_deny(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() - timedelta(days=10),
|
||||
total=10, require_approval=True, locale='en'
|
||||
total=10, require_approval=True, locale='en',
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
generate_invoice(o1)
|
||||
deny_order(o1)
|
||||
@@ -665,6 +693,7 @@ class PaymentReminderTests(TestCase):
|
||||
datetime=now() - timedelta(hours=4),
|
||||
expires=now().replace(hour=12, minute=0, second=0) + timedelta(days=10),
|
||||
total=Decimal('46.00'),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
@@ -788,6 +817,7 @@ class PaymentFailedTests(TestCase):
|
||||
datetime=now() - timedelta(hours=4),
|
||||
expires=now() - timedelta(hours=4) + timedelta(days=10),
|
||||
total=Decimal('46.00'),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
@@ -829,6 +859,7 @@ class DownloadReminderTests(TestCase):
|
||||
datetime=now() - timedelta(days=4),
|
||||
expires=now() - timedelta(hours=4) + timedelta(days=10),
|
||||
total=Decimal('46.00'),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
@@ -1021,6 +1052,7 @@ class OrderCancelTests(TestCase):
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal('46.00'),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
@@ -1227,6 +1259,7 @@ class OrderChangeManagerTests(TestCase):
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
total=Decimal('46.00'),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.order.payments.create(
|
||||
provider='banktransfer', state=OrderPayment.PAYMENT_STATE_CREATED, amount=self.order.total
|
||||
@@ -3405,6 +3438,7 @@ def test_autocheckin(clist_autocheckin, event):
|
||||
)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -3415,17 +3449,17 @@ def test_autocheckin(clist_autocheckin, event):
|
||||
"pprov": FreeOrderProvider(event),
|
||||
}],
|
||||
locale='de')[0]
|
||||
assert "web" in clist_autocheckin.auto_checkin_sales_channels
|
||||
assert clist_autocheckin.auto_checkin_sales_channels.contains(event.organizer.sales_channels.get(identifier="web"))
|
||||
assert order.positions.first().checkins.first().auto_checked_in
|
||||
|
||||
clist_autocheckin.auto_checkin_sales_channels = []
|
||||
clist_autocheckin.save()
|
||||
clist_autocheckin.auto_checkin_sales_channels.clear()
|
||||
|
||||
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=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -3436,7 +3470,7 @@ def test_autocheckin(clist_autocheckin, event):
|
||||
"pprov": FreeOrderProvider(event),
|
||||
}],
|
||||
locale='de')[0]
|
||||
assert clist_autocheckin.auto_checkin_sales_channels == []
|
||||
assert clist_autocheckin.auto_checkin_sales_channels.count() == 0
|
||||
assert order.positions.first().checkins.count() == 0
|
||||
|
||||
|
||||
@@ -3451,6 +3485,7 @@ def test_saleschannel_testmode_restriction(event):
|
||||
)
|
||||
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=today,
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
@@ -3461,7 +3496,7 @@ def test_saleschannel_testmode_restriction(event):
|
||||
"info_data": {},
|
||||
"pprov": FreeOrderProvider(event),
|
||||
}],
|
||||
locale='de', sales_channel='web')[0]
|
||||
locale='de')[0]
|
||||
assert not order.testmode
|
||||
|
||||
cp1 = CartPosition.objects.create(
|
||||
@@ -3469,6 +3504,7 @@ def test_saleschannel_testmode_restriction(event):
|
||||
)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier=FoobazSalesChannel.identifier),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -3478,7 +3514,7 @@ def test_saleschannel_testmode_restriction(event):
|
||||
"info_data": {},
|
||||
"pprov": FreeOrderProvider(event),
|
||||
}],
|
||||
locale='de', sales_channel=FoobazSalesChannel.identifier)[0]
|
||||
locale='de')[0]
|
||||
assert not order.testmode
|
||||
|
||||
cp1 = CartPosition.objects.create(
|
||||
@@ -3487,6 +3523,7 @@ def test_saleschannel_testmode_restriction(event):
|
||||
event.testmode = True
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -3496,7 +3533,7 @@ def test_saleschannel_testmode_restriction(event):
|
||||
"info_data": {},
|
||||
"pprov": FreeOrderProvider(event),
|
||||
}],
|
||||
locale='de', sales_channel='web')[0]
|
||||
locale='de')[0]
|
||||
assert order.testmode
|
||||
|
||||
cp1 = CartPosition.objects.create(
|
||||
@@ -3504,6 +3541,7 @@ def test_saleschannel_testmode_restriction(event):
|
||||
)
|
||||
order = _create_order(event, email='dummy@example.org', positions=[cp1],
|
||||
now_dt=today,
|
||||
sales_channel=event.organizer.sales_channels.get(identifier=FoobazSalesChannel.identifier),
|
||||
payment_requests=[{
|
||||
"id": "test0",
|
||||
"provider": "free",
|
||||
@@ -3513,7 +3551,7 @@ def test_saleschannel_testmode_restriction(event):
|
||||
"info_data": {},
|
||||
"pprov": FreeOrderProvider(event),
|
||||
}],
|
||||
locale='de', sales_channel=FoobazSalesChannel.identifier)[0]
|
||||
locale='de')[0]
|
||||
assert not order.testmode
|
||||
|
||||
|
||||
@@ -3530,6 +3568,7 @@ def test_giftcard_multiple(event):
|
||||
gc2.transactions.create(value=12, acceptor=event.organizer)
|
||||
order = _create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3580,6 +3619,7 @@ def test_giftcard_partial(event):
|
||||
gc1.transactions.create(value=12, acceptor=event.organizer)
|
||||
order = _create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3627,6 +3667,7 @@ def test_giftcard_payment_fee(event):
|
||||
gc1.transactions.create(value=12, acceptor=event.organizer)
|
||||
order = _create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3673,6 +3714,7 @@ def test_giftcard_invalid_currency(event):
|
||||
gc1.transactions.create(value=12, acceptor=event.organizer)
|
||||
_create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3715,6 +3757,7 @@ def test_giftcard_invalid_organizer(event):
|
||||
gc1.transactions.create(value=12, acceptor=event.organizer)
|
||||
_create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3756,6 +3799,7 @@ def test_giftcard_test_mode_invalid(event):
|
||||
gc1.transactions.create(value=12, acceptor=event.organizer)
|
||||
_create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3799,6 +3843,7 @@ def test_giftcard_test_mode_event(event):
|
||||
gc1.transactions.create(value=12, acceptor=event.organizer)
|
||||
_create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3840,6 +3885,7 @@ def test_giftcard_swap(event):
|
||||
gc1.transactions.create(value=12, acceptor=event.organizer)
|
||||
_create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3881,6 +3927,7 @@ def test_issue_when_paid_and_changed(event):
|
||||
q.items.add(ticket)
|
||||
order = _create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
@@ -3930,6 +3977,7 @@ class OrderReactivateTest(TestCase):
|
||||
datetime=now(), expires=now() + timedelta(days=1),
|
||||
cancellation_date=now(),
|
||||
total=Decimal('46.00'),
|
||||
sales_channel=self.event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.ticket = Item.objects.create(event=self.event, name='Early-bird ticket',
|
||||
default_price=Decimal('23.00'), admission=True)
|
||||
@@ -4066,6 +4114,7 @@ def test_autocreate_medium(event):
|
||||
q.items.add(ticket)
|
||||
order = _create_order(
|
||||
event, email='dummy@example.org', positions=[cp1],
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
now_dt=now(),
|
||||
payment_requests=[
|
||||
{
|
||||
|
||||
@@ -220,6 +220,7 @@ def test_availability_date_order_relative_subevents(event):
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + datetime.timedelta(days=10),
|
||||
total=Decimal('46.00'),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=order, item=ticket, variation=None, subevent=se1,
|
||||
|
||||
@@ -998,17 +998,20 @@ def test_limit_products_subevents_distinct(event, item, item2):
|
||||
@pytest.mark.django_db
|
||||
@scopes_disabled()
|
||||
def test_sales_channels(event, item):
|
||||
d1 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=20, sales_channels=['resellers'])
|
||||
d1 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=20, all_sales_channels=False)
|
||||
d1.save()
|
||||
d2 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=50, sales_channels=['web', 'resellers'])
|
||||
d1.limit_sales_channels.add(event.organizer.sales_channels.get(identifier="bar"))
|
||||
d2 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=50, all_sales_channels=False)
|
||||
d2.save()
|
||||
d2.limit_sales_channels.add(event.organizer.sales_channels.get(identifier="web"))
|
||||
d2.limit_sales_channels.add(event.organizer.sales_channels.get(identifier="bar"))
|
||||
|
||||
positions = (
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
|
||||
assert sorted([p for p, d in apply_discounts(event, 'resellers', positions)]) == [Decimal('80.00'), Decimal('80.00')]
|
||||
assert sorted([p for p, d in apply_discounts(event, 'bar', positions)]) == [Decimal('80.00'), Decimal('80.00')]
|
||||
assert sorted([p for p, d in apply_discounts(event, 'web', positions)]) == [Decimal('50.00'), Decimal('50.00')]
|
||||
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ def order(event, item):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING,
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
total=14, locale='en'
|
||||
)
|
||||
event.settings.set('attendee_names_asked', True)
|
||||
|
||||
@@ -65,6 +65,7 @@ def order(event):
|
||||
code='FOO', event=event, email='dummy@dummy.test',
|
||||
status=Order.STATUS_PENDING, locale='en',
|
||||
datetime=now(), expires=now() + timedelta(days=10),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
total=Decimal('46.00'),
|
||||
)
|
||||
tr19 = event.tax_rules.create(rate=Decimal('19.00'))
|
||||
|
||||
Reference in New Issue
Block a user