mirror of
https://github.com/pretix/pretix.git
synced 2026-05-07 15:34:02 +00:00
Cross selling (#4185)
Product categories can now be marked as "cross-selling categories", causing them to appear in the add-on checkout step as additional recommendations, depending on their cross-selling visibility (always, only if certain products are already in the cart, or only if they qualify for a discount according to discount rules). --------- Co-authored-by: Raphael Michel <michel@rami.io> Co-authored-by: Richard Schreiber <schreiber@rami.io>
This commit is contained in:
@@ -65,6 +65,8 @@ def test_full_clone_same_organizer():
|
||||
item_meta = event.item_meta_properties.create(name="Bla")
|
||||
tax_rule = event.tax_rules.create(name="VAT", rate=19)
|
||||
category = event.categories.create(name="Tickets")
|
||||
cross_sell_category = event.categories.create(name="Recommendations", cross_selling_mode="only",
|
||||
cross_selling_condition="products")
|
||||
|
||||
q1 = event.quotas.create(name="Quota 1", size=5)
|
||||
q2 = event.quotas.create(name="Quota 2", size=0, closed=True)
|
||||
@@ -88,6 +90,7 @@ def test_full_clone_same_organizer():
|
||||
q1.items.add(item1)
|
||||
q2.items.add(item2)
|
||||
q2.variations.add(item2v)
|
||||
cross_sell_category.cross_selling_match_products.add(item1)
|
||||
|
||||
event.discounts.create(internal_name="Fake discount")
|
||||
question1 = event.questions.create(question="Yes or no", type=Question.TYPE_BOOLEAN)
|
||||
@@ -156,7 +159,7 @@ def test_full_clone_same_organizer():
|
||||
copied_item1 = copied_event.items.get(name=item1.name)
|
||||
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.category == copied_event.categories.get(name='Tickets')
|
||||
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
|
||||
@@ -166,7 +169,7 @@ def test_full_clone_same_organizer():
|
||||
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.addons.get().addon_category == copied_event.categories.get(name='Tickets')
|
||||
assert copied_item1.bundles.get().bundled_item == copied_item2
|
||||
assert copied_item1.bundles.get().bundled_variation == copied_item2.variations.get()
|
||||
assert copied_item2.hidden_if_item_available == copied_item1
|
||||
@@ -174,6 +177,9 @@ def test_full_clone_same_organizer():
|
||||
assert copied_q2.items.get() == copied_item2
|
||||
assert copied_q2.variations.get() == copied_item2.variations.get()
|
||||
|
||||
copied_cross_sell_category = copied_event.categories.get(name=cross_sell_category.name)
|
||||
assert copied_cross_sell_category.cross_selling_match_products.get() == copied_item1
|
||||
|
||||
copied_question1 = copied_event.questions.get(type=question1.type)
|
||||
copied_question2 = copied_event.questions.get(type=question2.type)
|
||||
assert copied_question2.dependency_question == copied_question1
|
||||
|
||||
Reference in New Issue
Block a user