diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 76f214a3e2..60beb7157f 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -769,6 +769,9 @@ class OrderPosition(AbstractPosition): 'order_code': order.code }) + # Delete afterwards. Deleting in between might cause deletion of things related to add-ons + # due to the deletion cascade. + for cartpos in cp: cartpos.delete() return ops diff --git a/src/tests/presale/test_checkout.py b/src/tests/presale/test_checkout.py index af37d8929b..6cf617bfa7 100644 --- a/src/tests/presale/test_checkout.py +++ b/src/tests/presale/test_checkout.py @@ -73,6 +73,33 @@ class CheckoutTestCase(TestCase): self.assertRedirects(response, '/%s/%s/' % (self.orga.slug, self.event.slug), target_status_code=200) + def test_addon_questions(self): + q1 = Question.objects.create( + event=self.event, question='Age', type=Question.TYPE_NUMBER, + required=True + ) + q1.items.add(self.ticket) + q1.items.add(self.workshop1) + ItemAddOn.objects.create(base_item=self.ticket, addon_category=self.workshopcat, min_count=1, + price_included=True) + cp1 = CartPosition.objects.create( + event=self.event, cart_id=self.session_key, item=self.ticket, + price=23, expires=now() + timedelta(minutes=10) + ) + cp1.answers.create(question=q1, answer='12') + cp2 = CartPosition.objects.create( + event=self.event, cart_id=self.session_key, item=self.workshop1, addon_to=cp1, + price=0, expires=now() + timedelta(minutes=10) + ) + cp2.answers.create(question=q1, answer='12') + + self._set_session('payment', 'banktransfer') + response = self.client.post('/%s/%s/checkout/confirm/' % (self.orga.slug, self.event.slug), follow=True) + doc = BeautifulSoup(response.rendered_content, "lxml") + self.assertEqual(len(doc.select(".thank-you")), 1) + self.assertEqual(OrderPosition.objects.filter(item=self.ticket).first().answers.first().answer, '12') + self.assertEqual(OrderPosition.objects.filter(item=self.workshop1).first().answers.first().answer, '12') + def test_questions(self): q1 = Question.objects.create( event=self.event, question='Age', type=Question.TYPE_NUMBER,