Beispiel #1
0
 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'))
Beispiel #2
0
 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)
Beispiel #3
0
    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, '')
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
 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)
Beispiel #7
0
 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, '')
Beispiel #8
0
 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, '')
Beispiel #9
0
 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, '')
Beispiel #10
0
 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)
Beispiel #11
0
 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, '')
Beispiel #12
0
 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'))
Beispiel #13
0
 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.')
Beispiel #14
0
 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)
Beispiel #15
0
 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.'))
Beispiel #16
0
 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.')
Beispiel #17
0
 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)
Beispiel #18
0
 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)
Beispiel #19
0
 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.'))
Beispiel #20
0
 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'))
Beispiel #21
0
 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'))
Beispiel #22
0
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
Beispiel #24
0
 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'))