def test_voucher_reuse(self): self.quota.items.add(self.item1) v = Voucher.objects.create(quota=self.quota, event=self.event, valid_until=now() + timedelta(days=5)) self.assertTrue(v.is_active()) self.assertFalse(v.is_in_cart()) self.assertFalse(v.is_ordered()) # use a voucher normally cart = CartPosition.objects.create(event=self.event, item=self.item1, price=self.item1.default_price, expires=now() + timedelta(days=3), voucher=v) self.assertTrue(v.is_active()) self.assertTrue(v.is_in_cart()) self.assertFalse(v.is_ordered()) order = perform_order(event=self.event.id, payment_provider='free', positions=[cart.id]) v.refresh_from_db() self.assertFalse(v.is_active()) self.assertFalse(v.is_in_cart()) self.assertTrue(v.is_ordered()) # assert that the voucher cannot be reused cart = CartPosition.objects.create(event=self.event, item=self.item1, price=self.item1.default_price, expires=now() + timedelta(days=3), voucher=v) self.assertRaises(OrderError, perform_order, event=self.event.id, payment_provider='free', positions=[cart.id]) # assert that the voucher can be re-used after cancelling the successful order cancel_order(order) v.refresh_from_db() self.assertTrue(v.is_active()) self.assertFalse(v.is_in_cart()) self.assertTrue(v.is_ordered()) cart = CartPosition.objects.create(event=self.event, item=self.item1, price=self.item1.default_price, expires=now() + timedelta(days=3), voucher=v) perform_order(event=self.event.id, payment_provider='free', positions=[cart.id])
def test_voucher_reuse(self): self.quota.items.add(self.item1) v = Voucher.objects.create(quota=self.quota, event=self.event, valid_until=now() + timedelta(days=5)) # use a voucher normally cart = CartPosition.objects.create(event=self.event, item=self.item1, price=self.item1.default_price, expires=now() + timedelta(days=3), voucher=v) order = perform_order(event=self.event.id, payment_provider='free', positions=[cart.id]) # assert that the voucher cannot be reused cart = CartPosition.objects.create(event=self.event, item=self.item1, price=self.item1.default_price, expires=now() + timedelta(days=3), voucher=v) self.assertRaises(OrderError, perform_order, event=self.event.id, payment_provider='free', positions=[cart.id]) # assert that the voucher can be re-used after cancelling the successful order cancel_order(order) cart = CartPosition.objects.create(event=self.event, item=self.item1, price=self.item1.default_price, expires=now() + timedelta(days=3), voucher=v) perform_order(event=self.event.id, payment_provider='free', positions=[cart.id])
def perform_order(self, request: HttpRequest): try: order = perform_order(self.request.event, self.request.user, self.payment_provider, self.positions) except OrderError as e: messages.error(request, str(e)) return redirect(self.get_confirm_url()) else: messages.success(request, _('Your order has been placed.')) resp = self.payment_provider.payment_perform(request, order) return redirect(resp or self.get_order_url(order))
def perform_order(self, request: HttpRequest): try: order = perform_order(self.request.event, self.payment_provider, self.positions, user=request.user if request.user.is_authenticated() else None, email=request.session.get('guest_email', None), locale=translation.get_language()) except OrderError as e: messages.error(request, str(e)) return redirect(self.get_confirm_url()) else: # Message is delivered via GET parameter # messages.success(request, _('Your order has been placed.')) resp = self.payment_provider.payment_perform(request, order) return redirect(resp or self.get_order_url(order, not request.user.is_authenticated()))