def test_expired_voucher(self): """ Verify voucher_is_valid() assess that the voucher has expired. """ future_datetime = now() + datetime.timedelta(days=10) voucher, product = prepare_voucher(code=COUPON_CODE, start_datetime=future_datetime) valid, msg = voucher_is_valid(voucher=voucher, product=product, request=None) self.assertFalse(valid) self.assertEqual(msg, _('Coupon expired'))
def test_voucher_unavailable_to_buy(self): """ Verify that False is returned for unavialable products. """ request = RequestFactory().request() voucher, product = prepare_voucher(code=COUPON_CODE) product.expires = pytz.utc.localize(datetime.datetime.min) valid, __ = voucher_is_valid(voucher=voucher, products=[product], request=request) self.assertFalse(valid)
def test_valid_voucher(self): """ Verify voucher_is_valid() assess that the voucher is valid. """ voucher, product = prepare_voucher() valid, msg = voucher_is_valid(voucher=voucher, products=[product], request=self.request) self.assertTrue(valid) self.assertEquals(msg, '')
def test_once_per_customer_voucher(self): """ Verify the coupon is valid for anonymous users. """ voucher, product = prepare_voucher(usage=Voucher.ONCE_PER_CUSTOMER) valid, msg, hide_error_message = voucher_is_valid(voucher=voucher, products=[product], request=self.request) self.assertTrue(valid) self.assertEqual(msg, '') self.assertFalse(hide_error_message)
def test_omitting_unavailable_voucher(self): """ Verify if there are more than one product, that availability check is omitted. """ voucher, product = prepare_voucher() product.expires = pytz.utc.localize(datetime.datetime.min) __, seat = self.create_course_and_seat() valid, __ = voucher_is_valid(voucher=voucher, products=[product, seat], request=self.request) self.assertTrue(valid)
def assert_error_messages(self, voucher, product, user, error_msg): """ Assert the proper error message is returned. """ voucher.offers.first().record_usage(discount={'freq': 1, 'discount': 1}) self.request.user = user valid, msg = voucher_is_valid(voucher=voucher, products=[product], request=self.request) self.assertFalse(valid) self.assertEqual(msg, error_msg)
def test_once_per_customer_voucher(self): """ Verify the coupon is valid for anonymous users. """ voucher, product = prepare_voucher(usage=Voucher.ONCE_PER_CUSTOMER) request = RequestFactory().request() valid, msg = voucher_is_valid(voucher=voucher, products=[product], request=request) self.assertTrue(valid) self.assertEqual(msg, '')
def test_valid_voucher(self): """ Verify voucher_is_valid() assess that the voucher is valid. """ voucher, product = prepare_voucher(code=COUPON_CODE) request = RequestFactory().request() valid, msg = voucher_is_valid(voucher=voucher, products=[product], request=request) self.assertTrue(valid) self.assertEquals(msg, '')
def test_expired_voucher(self): """ Verify voucher_is_valid() assess that the voucher has expired. """ future_datetime = now() + datetime.timedelta(days=10) voucher, product = self.prepare_voucher(start_datetime=future_datetime) valid, msg = voucher_is_valid(voucher=voucher, product=product, request=None) self.assertFalse(valid) self.assertEqual(msg, _('Coupon expired'))
def test_no_voucher(self): """ Verify voucher_is_valid() assess that the voucher is invalid. """ valid, msg = voucher_is_valid(voucher=None, products=None, request=None) self.assertFalse(valid) self.assertEqual(msg, 'Coupon does not exist.')
def test_voucher_unavailable_to_buy(self): """ Verify that False is returned for unavailable products. """ voucher, product = prepare_voucher() product.expires = pytz.utc.localize(datetime.datetime.min) valid, __, hide_error_message = voucher_is_valid(voucher=voucher, products=[product], request=self.request) self.assertFalse(valid) self.assertFalse(hide_error_message)
def test_expired_voucher(self): """ Verify voucher_is_valid() assess that the voucher has expired. """ start_datetime = now() - datetime.timedelta(days=20) end_datetime = now() - datetime.timedelta(days=10) voucher, product = prepare_voucher(code=COUPON_CODE, start_datetime=start_datetime, end_datetime=end_datetime) valid, msg = voucher_is_valid(voucher=voucher, products=[product], request=None) self.assertFalse(valid) self.assertEqual(msg, _('This coupon code has expired.'))
def test_future_voucher(self): """ Verify voucher_is_valid() assess that the voucher has not started yet. """ start_datetime = now() + datetime.timedelta(days=10) end_datetime = now() + datetime.timedelta(days=20) voucher, product = prepare_voucher(start_datetime=start_datetime, end_datetime=end_datetime) valid, msg = voucher_is_valid(voucher=voucher, products=[product], request=None) self.assertFalse(valid) self.assertEqual(msg, 'This coupon code is not yet valid.')
def assert_error_messages(self, voucher, product, user, error_msg): """ Assert the proper error message is returned. """ voucher.offers.first().record_usage(discount={'freq': 1, 'discount': 1}) request = RequestFactory().request() request.user = user valid, msg = voucher_is_valid(voucher=voucher, products=[product], request=request) self.assertFalse(valid) self.assertEqual(msg, error_msg)
def test_omitting_unavailable_voucher(self): """ Verify if there are more than one product, that availability check is omitted. """ request = RequestFactory().request() voucher, product = prepare_voucher(code=COUPON_CODE) product.expires = pytz.utc.localize(datetime.datetime.min) __, seat = self.create_course_and_seat() valid, __ = voucher_is_valid(voucher=voucher, products=[product, seat], request=request) self.assertTrue(valid)
def test_future_voucher(self): """ Verify voucher_is_valid() assess that the voucher has not started yet. """ start_datetime = now() + datetime.timedelta(days=10) end_datetime = now() + datetime.timedelta(days=20) voucher, product = prepare_voucher(code=COUPON_CODE, start_datetime=start_datetime, end_datetime=end_datetime) valid, msg = voucher_is_valid(voucher=voucher, products=[product], request=None) self.assertFalse(valid) self.assertEqual(msg, _('This coupon code is not yet valid.'))
def test_used_voucher(self): """ Verify voucher_is_valid() assess that the voucher is unavailable. """ voucher, product = self.prepare_voucher() order = OrderFactory() user = self.create_user() VoucherApplication.objects.create(voucher=voucher, user=user, order=order) request = RequestFactory().request() valid, msg = voucher_is_valid(voucher=voucher, product=product, request=request) self.assertFalse(valid) self.assertEqual(msg, _('This coupon has already been used'))
def test_used_voucher(self): """ Verify voucher_is_valid() assess that the voucher is unavailable. """ voucher, product = prepare_voucher(code=COUPON_CODE) order = OrderFactory() user = self.create_user() VoucherApplication.objects.create(voucher=voucher, user=user, order=order) request = RequestFactory().request() valid, msg = voucher_is_valid(voucher=voucher, product=product, request=request) self.assertFalse(valid) self.assertEqual(msg, _('This coupon has already been used'))
def get_available_voucher_for_product(request, product, vouchers): """ Get first active entitlement from a list of vouchers for the given product. Arguments: product (Product): A product that has course_key as attribute (seat or bulk enrollment coupon) request (HttpRequest): request with voucher data vouchers: (List) List of voucher class objects for an enterprise """ for voucher in vouchers: is_valid_voucher, __ = voucher_is_valid(voucher, [product], request) if is_valid_voucher: voucher_course_ids = get_course_ids_from_voucher(request.site, voucher) if product.course_id in voucher_course_ids: return voucher
def get_available_voucher_for_product(request, product, vouchers): """ Get first active entitlement from a list of vouchers for the given product. Arguments: product (Product): A product that has course_id as attribute (seat or bulk enrollment coupon) request (HttpRequest): request with voucher data vouchers: (List) List of voucher class objects for an enterprise """ for voucher in vouchers: is_valid_voucher, __ = voucher_is_valid(voucher, [product], request) if is_valid_voucher: voucher_offer = voucher.offers.first() offer_range = voucher_offer.condition.range if offer_range.contains_product(product): return voucher # Explicitly return None in case product has no valid voucher return None
def test_no_voucher(self): """ Verify voucher_is_valid() assess that the voucher is invalid. """ valid, msg = voucher_is_valid(voucher=None, products=None, request=None) self.assertFalse(valid) self.assertEqual(msg, _('Coupon does not exist'))