Add tests and remove redundant checks

This commit is contained in:
Raphael Michel
2017-02-17 16:19:03 +01:00
parent d94c67bc7a
commit 7e135be012
3 changed files with 31 additions and 12 deletions

View File

@@ -282,11 +282,11 @@ class Order(LoggedModel):
if self.event.settings.get('payment_term_last'): if self.event.settings.get('payment_term_last'):
if now() > self.event.payment_term_last: if now() > self.event.payment_term_last:
return error_messages['late_lastdate'] return error_messages['late_lastdate']
if self.status == self.STATUS_PENDING:
return True
if not self.event.settings.get('payment_term_accept_late'): if not self.event.settings.get('payment_term_accept_late'):
return error_messages['late'] return error_messages['late']
if self.status == self.STATUS_PENDING:
return True
return self._is_still_available() return self._is_still_available()
def _is_still_available(self, now_dt: datetime=None) -> Union[bool, str]: def _is_still_available(self, now_dt: datetime=None) -> Union[bool, str]:

View File

@@ -115,8 +115,9 @@ def _add_new_items(event: Event, items: List[dict],
if i.get('voucher'): if i.get('voucher'):
try: try:
voucher = Voucher.objects.get(code=i.get('voucher').strip(), event=event) voucher = Voucher.objects.get(code=i.get('voucher').strip(), event=event)
if voucher.redeemed >= voucher.max_usages: except Voucher.DoesNotExist:
return error_messages['voucher_redeemed'] return error_messages['voucher_invalid']
else:
if voucher.valid_until is not None and voucher.valid_until < now_dt: if voucher.valid_until is not None and voucher.valid_until < now_dt:
return error_messages['voucher_expired'] return error_messages['voucher_expired']
if not voucher.applies_to(item, variation): 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: if i['count'] > v_avail:
return error_messages['voucher_redeemed_partial'] % 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. # 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()) 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: if item.require_voucher and voucher is None:
return error_messages['voucher_required'] return error_messages['voucher_required']

View File

@@ -46,6 +46,29 @@ class CartTestMixin:
class CartTest(CartTestMixin, TestCase): 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): def test_simple(self):
response = self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), { response = self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), {
'item_%d' % self.ticket.id: '1' 'item_%d' % self.ticket.id: '1'
@@ -355,9 +378,10 @@ class CartTest(CartTestMixin, TestCase):
price=23, expires=now() + timedelta(minutes=10) price=23, expires=now() + timedelta(minutes=10)
) )
self.client.post('/%s/%s/cart/add' % (self.orga.slug, self.event.slug), { 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) }, follow=True)
cp = CartPosition.objects.get(id=cp.id) cp.refresh_from_db()
self.assertGreater(cp.expires, now()) self.assertGreater(cp.expires, now() + timedelta(minutes=10))
def test_renew_expired_successfully(self): def test_renew_expired_successfully(self):
cp1 = CartPosition.objects.create( cp1 = CartPosition.objects.create(