From a10bf2a93998300a658ea30b850085ec9220beed Mon Sep 17 00:00:00 2001 From: Mira Date: Wed, 23 Oct 2024 17:12:03 +0200 Subject: [PATCH] Include "Cross-selling condition products" option when cloning category (#4534) * Include "Cross-selling condition products" option when cloning category * Add test case * Remove print --- src/pretix/control/views/item.py | 2 ++ src/tests/control/test_items.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py index f71e91414..325b3e10b 100644 --- a/src/pretix/control/views/item.py +++ b/src/pretix/control/views/item.py @@ -302,6 +302,8 @@ class CategoryCreate(EventPermissionRequiredMixin, CreateView): i = modelcopy(self.copy_from) i.pk = None kwargs['instance'] = i + kwargs.setdefault('initial', {}) + kwargs['initial']['cross_selling_match_products'] = [str(i.pk) for i in self.copy_from.cross_selling_match_products.all()] else: kwargs['instance'] = ItemCategory(event=self.request.event) return kwargs diff --git a/src/tests/control/test_items.py b/src/tests/control/test_items.py index 56c7bfac4..54c7de581 100644 --- a/src/tests/control/test_items.py +++ b/src/tests/control/test_items.py @@ -86,6 +86,23 @@ class CategoriesTest(ItemFormTest): with scopes_disabled(): assert str(ItemCategory.objects.get(id=c.id).name) == 'T-Shirts' + def test_copy(self): + i2 = Item.objects.create(event=self.event1, name="Non-Standard", default_price=10, position=2) + c = ItemCategory.objects.create(event=self.event1, name="Cross-Selling", cross_selling_mode='only', cross_selling_condition='products') + c.cross_selling_match_products.add(self.item1) + c.cross_selling_match_products.add(i2) + + doc = self.get_doc('/control/event/%s/%s/categories/add?copy_from=%d' % (self.orga1.slug, self.event1.slug, c.pk)) + form_data = extract_form_fields(doc.select('.container-fluid form')[0]) + assert form_data['name_0'] == 'Cross-Selling' + assert form_data['category_type'] == 'only' + assert form_data['cross_selling_condition'] == 'products' + assert form_data['cross_selling_match_products'] == ['1', '2'] + form_data['name_0'] = 'Recommendations' + doc = self.post_doc('/control/event/%s/%s/categories/add' % (self.orga1.slug, self.event1.slug), form_data) + assert doc.select(".alert-success") + self.assertIn("Recommendations", doc.select("#page-wrapper table")[0].text) + def test_sort(self): with scopes_disabled(): c1 = ItemCategory.objects.create(event=self.event1, name="Entry tickets", position=0)