static void Main(string[] args) { var inv = new Inventory(); Console.WriteLine("Just Running the test :P"); inv.AddSKU('A', 50); inv.AddSKU('B', 30.0d); inv.AddSKU('C', 20.0d); inv.AddSKU('D', 15.0d); var rules = new List <IDiscountRule>() { new SameSKUFixedPriceRule('A', 3, 130, inv), new CombinationDiscountRule('C', 'D', 30.00d, inv), new SameSKUFixedPriceRule('B', 2, 45.00d, inv) }; var engine = new DiscountEngine(rules); Console.WriteLine("Scenario 1"); Cart cart = new Cart(inv); cart.AddItem('A', 1); cart.AddItem('B', 1); cart.AddItem('C', 1); double discount = engine.ApplyAllDiscounts(cart); Console.WriteLine(String.Format("Cart Value {0} and Discount is {1} /n Amount Tobe Paid {2}", cart.CartValue, discount, cart.CartValue - discount)); Console.WriteLine("============================================================"); Console.WriteLine("Scenario 2"); cart = new Cart(inv); cart.AddItem('A', 5); cart.AddItem('B', 5); cart.AddItem('C', 1); discount = engine.ApplyAllDiscounts(cart); Console.WriteLine(String.Format("Cart Value {0} and Discount is {1} /n Amount Tobe Paid {2}", cart.CartValue, discount, cart.CartValue - discount)); Console.WriteLine("============================================================"); Console.WriteLine("Scenario 3"); cart = new Cart(inv); cart.AddItem('A', 3); cart.AddItem('B', 5); cart.AddItem('C', 1); cart.AddItem('D', 1); discount = engine.ApplyAllDiscounts(cart); Console.WriteLine(String.Format("Cart Value {0} and Discount is {1} /n Amount Tobe Paid {2}", cart.CartValue, discount, cart.CartValue - discount)); Console.WriteLine("============================================================"); Console.ReadKey(); }
public void ShouldApplyDiscountBasedOnWhichOffersBestValue() { var Rule1 = new SameSKUFixedPriceRule('A', 3, 130, GetTestInventory()); var Rule2 = new CombinationDiscountRule('C', 'D', 40.00d, GetTestInventory()); var engine = new DiscountEngine.DiscountEngine(new List <IDiscountRule>() { Rule1, Rule2 }); var cart = new Cart(GetTestInventory()); cart.AddItem('A', 10); cart.AddItem('C', 1); Assert.AreEqual(60.00d, engine.ApplyBestDiscount(cart)); }
public void ShouldApplyDiscountForAllApplicableRules() { var Rule1 = new SameSKUFixedPriceRule('A', 3, 130, GetTestInventory()); var Rule2 = new CombinationDiscountRule('C', 'D', 40.00d, GetTestInventory()); var engine = new DiscountEngine.DiscountEngine(new List <IDiscountRule>() { Rule1, Rule2 }); var cart = new Cart(GetTestInventory()); cart.AddItem('A', 5); cart.AddItem('C', 5); cart.AddItem('D', 5); Assert.AreEqual(145.00d, engine.ApplyAllDiscounts(cart)); }