Exemplo n.º 1
0
        public void CouponCalculateTestThrows(double price,
                                              double value)
        {
            var discount = new CouponDiscount(value);

            Assert.That(() => discount.Calculate(price), Throws.TypeOf <ArgumentException>());
        }
Exemplo n.º 2
0
        public void Cannot_calculate_coupon_discount_for_empty_cart_products_list()
        {
            //setup
            var couponDiscount = new CouponDiscount(threshold: 100, discount: 5);

            Assert.Throws <ApplicationException>(() =>
                                                 couponDiscount.Calculate(cartProducts: null, cartSubtotal: 100));
            Assert.Throws <ApplicationException>(() =>
                                                 couponDiscount.Calculate(cartProducts: new List <CartProduct>(), cartSubtotal: 100));
        }
Exemplo n.º 3
0
        private IFinalPrice UseCouponDiscount(IFinalPrice cart, ref string view)
        {
            var coupon = new CouponDiscount(cart, _discountVariablesRepository);

            coupon.AdjustPriceByCouponDiscount();
            view += "Coupon discount adjustment  : $" + cart.GetAdjustment() * -1 + " \n";
            view += "Price after coupon discount : $" + cart.GetFinalPrice() + " \n";

            return(coupon.AdjustedCart);
        }
Exemplo n.º 4
0
        private Coupon CreateCoupon(int index, bool canBeUsedOnce, CouponDiscount discount, IList <Guid> redeemerIds, IList <Guid> productIds)
        {
            var coupon = new Coupon
            {
                Code          = string.Format(CouponCodeFormat, index),
                Discount      = discount,
                IsEnabled     = true,
                CanBeUsedOnce = canBeUsedOnce,
                RedeemerIds   = redeemerIds,
                ProductIds    = productIds,
            };

            _couponsCommand.CreateCoupon(coupon);
            return(coupon);
        }
Exemplo n.º 5
0
        public void Can_get_discount_with_coupon()
        {
            //setup
            var product1 = new Product(code: "9501101530005", name: "Cheese set", price: 30m);
            var product2 = new Product(code: "9501101530006", name: "Hennessy cognac", price: 70);
            var discount = new CouponDiscount(threshold: 100m, discount: 5m);
            var sut      = new CashRegister(new[] { product1, product2 }, new [] { discount });

            //act
            sut.Scan(product1.Code);
            sut.Scan(product2.Code);

            var totalPrice = sut.CalculatePrice();

            Assert.That(totalPrice, Is.EqualTo(95));
        }
Exemplo n.º 6
0
        public void Cannot_calculate_coupon_discount_for_invalid_cart_subTotal()
        {
            //setup
            var couponDiscount = new CouponDiscount(threshold: 100, discount: 5);
            var cartProduct    = new CartProduct(new Product(code: "9501101530002", name: "Cheerios", price: 6.99m));

            Assert.Throws <ApplicationException>(() =>
                                                 couponDiscount.Calculate(cartProducts: new List <CartProduct>()
            {
                cartProduct
            }, cartSubtotal: 0));
            Assert.Throws <ApplicationException>(() =>
                                                 couponDiscount.Calculate(cartProducts: new List <CartProduct>()
            {
                cartProduct
            }, cartSubtotal: -100));
        }
Exemplo n.º 7
0
 public void Fill(System.Data.IDataReader dr)
 {
     _couponID             = Convert.ToInt32(dr["CouponID"]);
     _portalID             = Convert.ToInt32(dr["PortalID"]);
     _code                 = Convert.ToString(dr["Code"]);
     _description          = Convert.ToString(dr["Description"]);
     _ruleType             = (CouponRule)(dr["RuleType"]);
     _ruleAmount           = Convert.ToDecimal(Null.SetNull(dr["RuleAmount"], _ruleAmount));
     _discountType         = (CouponDiscount)(dr["DiscountType"]);
     _discountPercentage   = Convert.ToInt32((Null.SetNull(dr["DiscountPercentage"], _discountPercentage)));
     _discountAmount       = Convert.ToDecimal((Null.SetNull(dr["DiscountAmount"], _discountAmount)));
     _applyTo              = (CouponApplyTo)(dr["ApplyTo"]);
     _itemID               = Convert.ToInt32(Null.SetNull(dr["ItemID"], _itemID));
     _includeSubCategories = Convert.ToBoolean(Null.SetNull(dr["IncludeSubCategories"], _includeSubCategories));
     _startDate            = Convert.ToDateTime(dr["StartDate"]);
     _endDate              = Convert.ToDateTime(dr["EndDate"]);
     _validity             = (CouponValidity)(dr["Validity"]);
     _createdByUserID      = Convert.ToInt32(dr["CreatedByUserID"]);
     _createdDate          = Convert.ToDateTime(dr["CreatedDate"]);
 }
Exemplo n.º 8
0
        private void DisplayDiscountTypeRows()
        {
            CouponDiscount discountType = (CouponDiscount)rblDiscountType.SelectedIndex;

            switch (discountType)
            {
            case CouponDiscount.Percentage:
                trDiscountPercentage.Visible = true;
                trDiscountAmount.Visible     = false;
                break;

            case CouponDiscount.FixedAmount:
                trDiscountPercentage.Visible = false;
                trDiscountAmount.Visible     = true;
                break;

            case CouponDiscount.FreeShipping:
                trDiscountPercentage.Visible = false;
                trDiscountAmount.Visible     = false;
                break;
            }
        }
Exemplo n.º 9
0
        public static decimal DiscountedPrice
            (CouponDiscount discount, string priceCurrency, decimal price)
        {
            // C# 7 feature: this was much worse just a few months ago.
            switch (discount)
            {
            case PercentOffCouponDiscount percentOff:
                return(price - (price * percentOff.PercentOff / 100.0m));

            case AmountOffCouponDiscount amountOff:
                if (priceCurrency == amountOff.Currency)
                {
                    return(price - amountOff.Amount);
                }
                throw new ArgumentException
                          ("Currency does not match", "priceCurrency");

            // we always have to handle this since somebody could subclass
            // CouponDiscount with an unexpected type
            default:
                throw new ArgumentException
                          ("Unknown type", nameof(discount));
            }
        }
Exemplo n.º 10
0
        public double ValueTest()
        {
            var discount = new CouponDiscount(1000);

            return(discount.Value());
        }
Exemplo n.º 11
0
        public string DescriptionTest()
        {
            var discount = new CouponDiscount(1000);

            return(discount.Description);
        }
Exemplo n.º 12
0
        public double CouponValueTest(double value)
        {
            var discount = new CouponDiscount(value);

            return(discount.CouponValue);
        }
Exemplo n.º 13
0
        public void CouponCalculateTest(double price, double value, double result)
        {
            var discount = new CouponDiscount(value);

            Assert.That(() => discount.Calculate(price), Is.EqualTo(result));
        }
Exemplo n.º 14
0
 private static decimal GetDiscount(decimal price, CouponDiscount discount)
 {
     return(discount is PercentageCouponDiscount
         ? GetDiscount(price, ((PercentageCouponDiscount)discount).Percentage)
         : Math.Round(((FixedCouponDiscount)discount).Amount, 2));
 }