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); }
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); }
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); }