forked from CGM_Public/pretix_original
New implementation of sales channels (#4111)
Co-authored-by: Martin Gross <gross@rami.io>
This commit is contained in:
@@ -47,7 +47,6 @@ class BundlePricesTest(TestCase):
|
||||
date_from=datetime.datetime(now().year + 1, 12, 26, tzinfo=datetime.timezone.utc),
|
||||
live=True,
|
||||
plugins="pretix.plugins.banktransfer",
|
||||
sales_channels=['web', 'bar']
|
||||
)
|
||||
self.tr19 = self.event.tax_rules.create(rate=Decimal('19.00'))
|
||||
self.tr7 = self.event.tax_rules.create(rate=Decimal('7.00'))
|
||||
|
||||
@@ -71,7 +71,6 @@ class CartTestMixin:
|
||||
date_from=datetime.datetime(now().year + 1, 12, 26, tzinfo=datetime.timezone.utc),
|
||||
live=True,
|
||||
plugins="pretix.plugins.banktransfer",
|
||||
sales_channels=['web', 'bar']
|
||||
)
|
||||
self.tr19 = self.event.tax_rules.create(rate=Decimal('19.00'))
|
||||
self.category = ItemCategory.objects.create(event=self.event, name="Everything", position=0)
|
||||
@@ -914,8 +913,10 @@ class CartTest(CartTestMixin, TestCase):
|
||||
self.assertFalse(CartPosition.objects.filter(cart_id=self.session_key, event=self.event).exists())
|
||||
|
||||
def test_wrong_sales_channel(self):
|
||||
self.ticket.sales_channels = ['bar']
|
||||
self.ticket.save()
|
||||
with scopes_disabled():
|
||||
self.ticket.all_sales_channels = False
|
||||
self.ticket.limit_sales_channels.add(self.orga.sales_channels.get(identifier="bar"))
|
||||
self.ticket.save()
|
||||
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
'item_%d' % self.ticket.id: '1',
|
||||
}, follow=True)
|
||||
@@ -923,17 +924,22 @@ class CartTest(CartTestMixin, TestCase):
|
||||
self.assertEqual(CartPosition.objects.filter(cart_id=self.session_key, event=self.event).count(), 0)
|
||||
|
||||
def test_variation_wrong_sales_channel(self):
|
||||
self.shirt_blue.sales_channels = ['bar']
|
||||
self.shirt_blue.save()
|
||||
with scopes_disabled():
|
||||
self.shirt_blue.all_sales_channels = False
|
||||
self.shirt_blue.limit_sales_channels.add(self.orga.sales_channels.get(identifier="bar"))
|
||||
self.shirt_blue.save()
|
||||
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
'variation_%d_%d' % (self.shirt.id, self.shirt_blue.id): '1',
|
||||
}, follow=True)
|
||||
with scopes_disabled():
|
||||
self.assertEqual(CartPosition.objects.filter(cart_id=self.session_key, event=self.event).count(), 0)
|
||||
self.shirt_blue.sales_channels = ['bar', 'web']
|
||||
self.shirt_blue.save()
|
||||
self.shirt.sales_channels = ['bar']
|
||||
self.shirt.save()
|
||||
self.shirt_blue.all_sales_channels = False
|
||||
self.shirt_blue.limit_sales_channels.add(self.orga.sales_channels.get(identifier="bar"))
|
||||
self.shirt_blue.limit_sales_channels.add(self.orga.sales_channels.get(identifier="web"))
|
||||
self.shirt_blue.save()
|
||||
self.shirt.all_sales_channels = False
|
||||
self.shirt.limit_sales_channels.add(self.orga.sales_channels.get(identifier="bar"))
|
||||
self.shirt.save()
|
||||
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
'variation_%d_%d' % (self.shirt.id, self.shirt_blue.id): '1',
|
||||
}, follow=True)
|
||||
@@ -941,11 +947,13 @@ class CartTest(CartTestMixin, TestCase):
|
||||
self.assertEqual(CartPosition.objects.filter(cart_id=self.session_key, event=self.event).count(), 0)
|
||||
|
||||
def test_other_sales_channel(self):
|
||||
self.ticket.sales_channels = ['bar']
|
||||
self.ticket.save()
|
||||
with scopes_disabled():
|
||||
self.ticket.all_sales_channels = False
|
||||
self.ticket.limit_sales_channels.add(self.orga.sales_channels.get(identifier="bar"))
|
||||
self.ticket.save()
|
||||
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
'item_%d' % self.ticket.id: '1',
|
||||
}, follow=True, PRETIX_SALES_CHANNEL=FoobarSalesChannel)
|
||||
}, follow=True, PRETIX_SALES_CHANNEL=FoobarSalesChannel.identifier)
|
||||
with scopes_disabled():
|
||||
self.assertEqual(CartPosition.objects.filter(cart_id=self.session_key, event=self.event).count(), 1)
|
||||
|
||||
@@ -1020,13 +1028,13 @@ class CartTest(CartTestMixin, TestCase):
|
||||
self.event.settings.max_items_per_order = 5
|
||||
response = self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
'item_%d' % self.ticket.id: '5',
|
||||
}, follow=True, PRETIX_SALES_CHANNEL=FoobarSalesChannel)
|
||||
}, follow=True, PRETIX_SALES_CHANNEL=FoobarSalesChannel.identifier)
|
||||
self.assertRedirects(response, '/%s/%s/?require_cookie=true' % (self.orga.slug, self.event.slug),
|
||||
target_status_code=200)
|
||||
doc = BeautifulSoup(response.rendered_content, "lxml")
|
||||
self.assertNotIn('more than', doc.select('.alert-danger')[0].text)
|
||||
with scopes_disabled():
|
||||
self.assertEqual(CartPosition.objects.filter(cart_id=self.session_key, event=self.event).count(), 1)
|
||||
self.assertEqual(CartPosition.objects.filter(cart_id=self.session_key, event=self.event).count(), 5)
|
||||
|
||||
def test_max_per_item_variations_failed(self):
|
||||
self.shirt.max_per_order = 1
|
||||
@@ -2392,7 +2400,8 @@ class CartAddonTest(CartTestMixin, TestCase):
|
||||
self.workshopquota.variations.add(self.workshop3a)
|
||||
self.workshopquota.variations.add(self.workshop3b)
|
||||
self.addon1 = ItemAddOn.objects.create(base_item=self.ticket, addon_category=self.workshopcat)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key,
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
|
||||
@classscope(attr='orga')
|
||||
def test_cart_set_simple_addon_included(self):
|
||||
@@ -2715,7 +2724,7 @@ class CartAddonTest(CartTestMixin, TestCase):
|
||||
self.addon1.multi_allowed = True
|
||||
self.addon1.save()
|
||||
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key, sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
self.cm.set_addons([
|
||||
{
|
||||
'addon_to': cp1.pk,
|
||||
@@ -2729,7 +2738,7 @@ class CartAddonTest(CartTestMixin, TestCase):
|
||||
assert cp1.addons.count() == 3
|
||||
assert all(a.price == Decimal('24.00') for a in cp1.addons.all())
|
||||
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key, sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
self.cm.set_addons([
|
||||
{
|
||||
'addon_to': cp1.pk,
|
||||
@@ -2763,7 +2772,7 @@ class CartAddonTest(CartTestMixin, TestCase):
|
||||
self.cm.commit()
|
||||
assert cp1.addons.count() == 3
|
||||
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key, sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
self.cm.set_addons([
|
||||
{
|
||||
'addon_to': cp1.pk,
|
||||
@@ -2775,7 +2784,7 @@ class CartAddonTest(CartTestMixin, TestCase):
|
||||
self.cm.commit()
|
||||
assert cp1.addons.count() == 4
|
||||
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key, sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
self.cm.set_addons([
|
||||
{
|
||||
'addon_to': cp1.pk,
|
||||
@@ -3117,7 +3126,7 @@ class CartBundleTest(CartTestMixin, TestCase):
|
||||
designated_price=1.5,
|
||||
count=1
|
||||
)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key, sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
|
||||
@classscope(attr='orga')
|
||||
def test_simple_bundle(self):
|
||||
@@ -3537,7 +3546,7 @@ class CartBundleTest(CartTestMixin, TestCase):
|
||||
b = cp.addons.first()
|
||||
assert b.item == self.trans
|
||||
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key, sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
self.cm.set_addons([
|
||||
{
|
||||
'addon_to': cp.pk,
|
||||
@@ -4093,7 +4102,7 @@ class CartSeatingTest(CartTestMixin, TestCase):
|
||||
self.seat_a1 = self.event.seats.create(seat_number="A1", product=self.ticket, seat_guid="A1")
|
||||
self.seat_a2 = self.event.seats.create(seat_number="A2", product=self.ticket, seat_guid="A2")
|
||||
self.seat_a3 = self.event.seats.create(seat_number="A3", product=self.ticket, seat_guid="A3")
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
self.cm = CartManager(event=self.event, cart_id=self.session_key, sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
|
||||
def test_add_with_seat_without_variation(self):
|
||||
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
|
||||
|
||||
@@ -3760,6 +3760,7 @@ class QuestionsTestCase(BaseCheckoutTestCase, TestCase):
|
||||
o3 = QuestionAnswer.objects.get(question=q3)
|
||||
order = Order.objects.create(event=self.event, status=Order.STATUS_PAID,
|
||||
expires=now() + timedelta(days=3),
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
total=4)
|
||||
op = OrderPosition.objects.create(order=order, item=self.ticket, price=42)
|
||||
o1.cartposition, o2.cartposition, o3.cartposition = None, None, None
|
||||
@@ -4454,7 +4455,7 @@ class CheckoutBundleTest(BaseCheckoutTestCase, TestCase):
|
||||
)
|
||||
CartPosition.objects.filter(addon_to__isnull=False).delete()
|
||||
CartPosition.objects.all().delete()
|
||||
cm = CartManager(event=self.event, cart_id="temp")
|
||||
cm = CartManager(event=self.event, cart_id="temp", sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
cm.add_new_items([{
|
||||
'item': self.ticket.pk,
|
||||
'variation': None,
|
||||
@@ -4473,7 +4474,7 @@ class CheckoutBundleTest(BaseCheckoutTestCase, TestCase):
|
||||
cp.cart_id = self.session_key
|
||||
cp.addon_to = map[cp.addon_to_id]
|
||||
cp.save()
|
||||
cm = CartManager(event=self.event, cart_id=self.session_key)
|
||||
cm = CartManager(event=self.event, cart_id=self.session_key, sales_channel=self.orga.sales_channels.get(identifier="web"))
|
||||
cm.commit() # execute discounts on resorted cart
|
||||
|
||||
self._set_payment()
|
||||
|
||||
@@ -466,6 +466,7 @@ def test_org_order_list(env, client):
|
||||
datetime=now() - datetime.timedelta(days=3),
|
||||
expires=now() + datetime.timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o1,
|
||||
@@ -481,6 +482,7 @@ def test_org_order_list(env, client):
|
||||
datetime=now() - datetime.timedelta(days=3),
|
||||
expires=now() + datetime.timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o2,
|
||||
@@ -497,6 +499,7 @@ def test_org_order_list(env, client):
|
||||
datetime=now() - datetime.timedelta(days=3),
|
||||
expires=now() + datetime.timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||
)
|
||||
OrderPosition.objects.create(
|
||||
order=o3,
|
||||
|
||||
@@ -65,7 +65,7 @@ class EventTestMixin:
|
||||
self.event = Event.objects.create(
|
||||
organizer=self.orga, name='30C3', slug='30c3',
|
||||
date_from=datetime.datetime(now().year + 1, 12, 26, 14, 0, tzinfo=datetime.timezone.utc),
|
||||
live=True, sales_channels=['web', 'bar']
|
||||
live=True,
|
||||
)
|
||||
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
|
||||
t = Team.objects.create(organizer=self.orga, can_change_event_settings=True)
|
||||
@@ -153,11 +153,15 @@ class ItemDisplayTest(EventTestMixin, SoupTest):
|
||||
with scopes_disabled():
|
||||
q = Quota.objects.create(event=self.event, name='Quota', size=2)
|
||||
item = Item.objects.create(event=self.event, name='Early-bird ticket', default_price=0, active=True,
|
||||
sales_channels=['bar'])
|
||||
all_sales_channels=False)
|
||||
item.limit_sales_channels.add(self.orga.sales_channels.get(identifier="bar"))
|
||||
q.items.add(item)
|
||||
html = self.client.get('/%s/%s/' % (self.orga.slug, self.event.slug)).rendered_content
|
||||
self.assertNotIn("Early-bird", html)
|
||||
html = self.client.get('/%s/%s/' % (self.orga.slug, self.event.slug), PRETIX_SALES_CHANNEL=FoobarSalesChannel).rendered_content
|
||||
html = self.client.get(
|
||||
'/%s/%s/' % (self.orga.slug, self.event.slug),
|
||||
PRETIX_SALES_CHANNEL=FoobarSalesChannel.identifier
|
||||
).rendered_content
|
||||
self.assertIn("Early-bird", html)
|
||||
|
||||
def test_timely_available(self):
|
||||
@@ -550,7 +554,8 @@ class ItemDisplayTest(EventTestMixin, SoupTest):
|
||||
q = Quota.objects.create(event=self.event, name='Quota', size=None)
|
||||
item = Item.objects.create(event=self.event, name='Early-bird ticket', category=c, default_price=0)
|
||||
var1 = ItemVariation.objects.create(item=item, value='Red')
|
||||
var2 = ItemVariation.objects.create(item=item, value='Blue', sales_channels=['foobar'])
|
||||
var2 = ItemVariation.objects.create(item=item, value='Blue', all_sales_channels=False)
|
||||
var2.limit_sales_channels.add(self.orga.sales_channels.get(identifier='bar'))
|
||||
q.items.add(item)
|
||||
q.variations.add(var1)
|
||||
q.variations.add(var2)
|
||||
@@ -1278,7 +1283,7 @@ class DeadlineTest(EventTestMixin, TestCase):
|
||||
def test_saleschannel_disabled(self):
|
||||
self.event.presale_start = None
|
||||
self.event.presale_end = None
|
||||
self.event.sales_channels = []
|
||||
self.event.all_sales_channels = False
|
||||
self.event.save()
|
||||
response = self.client.get(
|
||||
'/%s/%s/' % (self.orga.slug, self.event.slug)
|
||||
@@ -1325,6 +1330,7 @@ class TestResendLink(EventTestMixin, SoupTest):
|
||||
Order.objects.create(
|
||||
code='DUMMY1', status=Order.STATUS_PENDING, event=self.event,
|
||||
email='dummy@dummy.dummy', datetime=now(), expires=now(),
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
total=0,
|
||||
)
|
||||
mail.outbox = []
|
||||
@@ -1339,6 +1345,7 @@ class TestResendLink(EventTestMixin, SoupTest):
|
||||
Order.objects.create(
|
||||
code='DUMMY1', status=Order.STATUS_PENDING, event=self.event,
|
||||
email='dummy@dummy.dummy', datetime=now(), expires=now(),
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
total=0,
|
||||
)
|
||||
mail.outbox = []
|
||||
@@ -1354,11 +1361,13 @@ class TestResendLink(EventTestMixin, SoupTest):
|
||||
Order.objects.create(
|
||||
code='DUMMY1', status=Order.STATUS_PENDING, event=self.event,
|
||||
email='dummy@dummy.dummy', datetime=now(), expires=now(),
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
total=0,
|
||||
)
|
||||
Order.objects.create(
|
||||
code='DUMMY2', status=Order.STATUS_PENDING, event=self.event,
|
||||
email='dummy@dummy.dummy', datetime=now(), expires=now(),
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
total=0,
|
||||
)
|
||||
mail.outbox = []
|
||||
|
||||
@@ -92,6 +92,7 @@ class BaseOrdersTest(TestCase):
|
||||
datetime=now() - datetime.timedelta(days=3),
|
||||
expires=now() + datetime.timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
locale='en'
|
||||
)
|
||||
self.ticket_pos = OrderPosition.objects.create(
|
||||
@@ -1349,12 +1350,12 @@ class OrderChangeAddonsTest(BaseOrdersTest):
|
||||
self._assert_ws2a_not_allowed()
|
||||
|
||||
def test_forbidden_sales_channel(self):
|
||||
self.workshop2.sales_channels = ['pretixpos']
|
||||
self.workshop2.all_sales_channels = False
|
||||
self.workshop2.save()
|
||||
self._assert_ws2a_not_allowed()
|
||||
|
||||
def test_forbidden_var_sales_channel(self):
|
||||
self.workshop2a.sales_channels = ['pretixpos']
|
||||
self.workshop2a.all_sales_channels = False
|
||||
self.workshop2a.save()
|
||||
self._assert_ws2a_not_allowed()
|
||||
|
||||
|
||||
@@ -91,6 +91,7 @@ class BaseOrdersTest(TestCase):
|
||||
datetime=now() - datetime.timedelta(days=3),
|
||||
expires=now() + datetime.timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
locale='en'
|
||||
)
|
||||
self.ticket_pos = OrderPosition.objects.create(
|
||||
@@ -114,7 +115,8 @@ class BaseOrdersTest(TestCase):
|
||||
email='user@localhost',
|
||||
datetime=now() - datetime.timedelta(days=3),
|
||||
expires=now() + datetime.timedelta(days=11),
|
||||
total=Decimal("23")
|
||||
total=Decimal("23"),
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -46,7 +46,8 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
datetime=now() - datetime.timedelta(days=3),
|
||||
expires=now() + datetime.timedelta(days=11),
|
||||
total=Decimal("23"),
|
||||
locale='en'
|
||||
locale='en',
|
||||
sales_channel=self.orga.sales_channels.get(identifier="web"),
|
||||
)
|
||||
self.ticket_pos = OrderPosition.objects.create(
|
||||
order=self.order,
|
||||
@@ -146,7 +147,7 @@ class WidgetCartTest(CartTestMixin, TestCase):
|
||||
self.assertIn('23', doc.select('.cart .cart-row')[0].select('.price')[1].text)
|
||||
|
||||
def test_saleschannel_disabled(self):
|
||||
self.event.sales_channels = []
|
||||
self.event.all_sales_channels = False
|
||||
self.event.save()
|
||||
response = self.client.get('/%s/%s/widget/product_list' % (self.orga.slug, self.event.slug))
|
||||
data = json.loads(response.content.decode())
|
||||
|
||||
Reference in New Issue
Block a user