From f78e54f2a19fe8797041bf4f35824d8cc5a4f4be Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 9 Mar 2020 21:21:28 +0100 Subject: [PATCH] Fix #575 -- Do not extend card expiry on failed card operations --- src/pretix/base/services/cart.py | 3 ++- src/tests/presale/test_cart.py | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index b54bb56114..b618914c4a 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -1005,8 +1005,9 @@ class CartManager: with lockfn() as now_dt: with transaction.atomic(): self.now_dt = now_dt - self._extend_expiry_of_valid_existing_positions() err = self._perform_operations() or err + if not err: + self._extend_expiry_of_valid_existing_positions() if err: raise CartError(err) diff --git a/src/tests/presale/test_cart.py b/src/tests/presale/test_cart.py index d4c4bc414d..721445ac77 100644 --- a/src/tests/presale/test_cart.py +++ b/src/tests/presale/test_cart.py @@ -206,6 +206,22 @@ class CartTest(CartTestMixin, TestCase): assert not objs[0].attendee_name assert not objs[0].answers.exists() + def test_do_not_extend_on_empty_add(self): + with scopes_disabled(): + cp = CartPosition.objects.create( + event=self.event, cart_id=self.session_key, item=self.ticket, + price=23, expires=now() + timedelta(minutes=10) + ) + self.quota_tickets.size = 1 + self.quota_tickets.save() + self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), { + 'item_%d' % self.ticket.id: '1', + }, follow=False) + with scopes_disabled(): + objs = list(CartPosition.objects.filter(cart_id=self.session_key, event=self.event)) + self.assertEqual(len(objs), 1) + self.assertEqual(objs[0].expires, cp.expires) + def test_widget_data_session(self): self.event.settings.attendee_names_asked = True self.event.settings.attendee_emails_asked = True