public void Define_SinglePriceRule_As_MultiPriceRule_With_Qty_1()
        {
            IPricingRule rule = new QuantityPricingRule("A", 1, 50);
            decimal price = rule.GetPrice();
            decimal expectedPrice = 50;

            Assert.AreEqual(expectedPrice, price);
        }
        public void If_QuantityPricingRule_A_50_Then_Price_is_50()
        {
            QuantityPricingRule rule = new QuantityPricingRule("A", 50);

            decimal price = rule.GetPrice();
            decimal expectedPrice = 50;

            Assert.AreEqual(expectedPrice, price);
        }
Esempio n. 3
0
        public decimal GetItemTotalPrice(string item, int totalQuantity)
        {
            IEnumerable <IPricingRule> sortedRules = this.GetPricingRulesSortedByPriority();
            var sortedItemRules = sortedRules.Where(r => r.Sku == item);

            decimal itemTotalPrice = 0;

            int restQuantity = totalQuantity;

            bool foundQtyDiscountRule = false;

            foreach (var itemRule in sortedItemRules)
            {
                if (!foundQtyDiscountRule)
                {
                    QuantityDiscountPricingRule qtyDiscountRule = itemRule as QuantityDiscountPricingRule;
                    if (qtyDiscountRule != null)
                    {
                        foundQtyDiscountRule = true;
                        restQuantity         = qtyDiscountRule.GetTotalDiscountQuantity(restQuantity);

                        continue;
                    }
                }
                else
                {
                    // ignore the other quantity discount rules
                }

                QuantityPricingRule qtyRule = itemRule as QuantityPricingRule;
                if (qtyRule != null)
                {
                    int multiple = restQuantity / qtyRule.Quantity;
                    restQuantity    = restQuantity % qtyRule.Quantity;
                    itemTotalPrice += qtyRule.GetPrice() * multiple;

                    continue;
                }
            }

            return(itemTotalPrice);
        }
Esempio n. 4
0
 public void AddQuantityPricingRule(QuantityPricingRule rule)
 {
     pricingRuleList.Add(rule);
 }
 public void QuantityPricingRule_Quantity_LessThan_1_Throws_Exception()
 {
     QuantityPricingRule rule = new QuantityPricingRule("A", 0, 50);
 }
 public void QuantityPricingRule_Price_LessThan_0_Throws_Exception()
 {
     QuantityPricingRule rule = new QuantityPricingRule("A", 2, -1);
 }
Esempio n. 7
0
 public void AddQuantityPricingRule(QuantityPricingRule rule)
 {
     pricingRuleList.Add(rule);
 }