From 7e135be0123d6701e2b181f48b6132452a482641 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 17 Feb 2017 16:19:03 +0100 Subject: [PATCH] Add tests and remove redundant checks --- src/pretix/base/models/orders.py | 4 ++-- src/pretix/base/services/cart.py | 11 +++-------- src/tests/presale/test_cart.py | 28 ++++++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index d8db2e22fb..6d4927e8f5 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -282,11 +282,11 @@ class Order(LoggedModel): if self.event.settings.get('payment_term_last'): if now() > self.event.payment_term_last: return error_messages['late_lastdate'] - if self.status == self.STATUS_PENDING: - return True if not self.event.settings.get('payment_term_accept_late'): return error_messages['late'] + if self.status == self.STATUS_PENDING: + return True return self._is_still_available() def _is_still_available(self, now_dt: datetime=None) -> Union[bool, str]: diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index d209102adf..fdf2fac96b 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -115,8 +115,9 @@ def _add_new_items(event: Event, items: List[dict], if i.get('voucher'): try: voucher = Voucher.objects.get(code=i.get('voucher').strip(), event=event) - if voucher.redeemed >= voucher.max_usages: - return error_messages['voucher_redeemed'] + except Voucher.DoesNotExist: + return error_messages['voucher_invalid'] + else: if voucher.valid_until is not None and voucher.valid_until < now_dt: return error_messages['voucher_expired'] if not voucher.applies_to(item, variation): @@ -135,15 +136,9 @@ def _add_new_items(event: Event, items: List[dict], if i['count'] > v_avail: return error_messages['voucher_redeemed_partial'] % v_avail - except Voucher.DoesNotExist: - return error_messages['voucher_invalid'] - # Fetch all quotas. If there are no quotas, this item is not allowed to be sold. quotas = list(item.quotas.all()) if variation is None else list(variation.quotas.all()) - if voucher and voucher.quota and voucher.quota.pk not in [q.pk for q in quotas]: - return error_messages['voucher_invalid_item'] - if item.require_voucher and voucher is None: return error_messages['voucher_required'] diff --git a/src/tests/presale/test_cart.py b/src/tests/presale/test_cart.py index 5284312537..205899cc8a 100644 --- a/src/tests/presale/test_cart.py +++ b/src/tests/presale/test_cart.py @@ -46,6 +46,29 @@ class CartTestMixin: class CartTest(CartTestMixin, TestCase): + + def test_after_presale(self): + self.event.presale_end = now() - timedelta(days=1) + self.event.save() + response = self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), { + 'item_%d' % self.ticket.id: '1' + }, follow=True) + self.assertRedirects(response, '/%s/%s/' % (self.orga.slug, self.event.slug), + target_status_code=200) + assert 'alert-danger' in response.rendered_content + assert not CartPosition.objects.filter(cart_id=self.session_key, event=self.event).exists() + + def test_before_presale(self): + self.event.presale_start = now() + timedelta(days=1) + self.event.save() + response = self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), { + 'item_%d' % self.ticket.id: '1' + }, follow=True) + self.assertRedirects(response, '/%s/%s/' % (self.orga.slug, self.event.slug), + target_status_code=200) + assert 'alert-danger' in response.rendered_content + assert not CartPosition.objects.filter(cart_id=self.session_key, event=self.event).exists() + def test_simple(self): response = self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), { 'item_%d' % self.ticket.id: '1' @@ -355,9 +378,10 @@ class CartTest(CartTestMixin, TestCase): price=23, expires=now() + timedelta(minutes=10) ) self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), { + 'variation_%d_%d' % (self.shirt.id, self.shirt_red.id): '1' }, follow=True) - cp = CartPosition.objects.get(id=cp.id) - self.assertGreater(cp.expires, now()) + cp.refresh_from_db() + self.assertGreater(cp.expires, now() + timedelta(minutes=10)) def test_renew_expired_successfully(self): cp1 = CartPosition.objects.create(