public void Buy3MilksGet4thFreeRule_IsApplicable_ShouldReturn_Correctly()
        {
            List <IBasketItem> basketItems = null;
            var rule = new Buy3MilksGet4thFreeRule();

            Assert.IsFalse(rule.IsApplicable(basketItems));

            basketItems = new List <IBasketItem>();
            Assert.IsFalse(rule.IsApplicable(basketItems));

            var milk = new Product()
            {
                Name  = "Milk",
                Price = 1.15
            };


            basketItems.Add(new BasketItem(milk, 1));
            Assert.IsFalse(rule.IsApplicable(basketItems));

            basketItems[0].Quantity++;
            Assert.IsFalse(rule.IsApplicable(basketItems));

            basketItems[0].Quantity++;
            Assert.IsFalse(rule.IsApplicable(basketItems));

            basketItems[0].Quantity++;
            Assert.IsTrue(rule.IsApplicable(basketItems));
        }
        public void Buy3MilksGet4thFreeRule_ApplyDiscount_ShouldApply_Correctly()
        {
            List <IBasketItem> basketItems = null;
            var rule = new Buy3MilksGet4thFreeRule();

            Assert.AreEqual(0, rule.ApplyDiscount(basketItems));

            basketItems = new List <IBasketItem>();
            Assert.AreEqual(0, rule.ApplyDiscount(basketItems));

            var milk = new Product()
            {
                Name  = "Milk",
                Price = 1.15
            };


            basketItems.Add(new BasketItem(milk, 1));
            Assert.AreEqual(0, rule.ApplyDiscount(basketItems));

            basketItems[0].Quantity++;
            Assert.AreEqual(0, rule.ApplyDiscount(basketItems));

            basketItems[0].Quantity++;
            Assert.AreEqual(0, rule.ApplyDiscount(basketItems));

            basketItems[0].Quantity++;
            Assert.AreEqual(1.15, rule.ApplyDiscount(basketItems));
        }