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

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

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

            basketItems.Add(new BasketItem(new Product()
            {
                Name = "Milk", Price = 1.15
            }, 1));
            Assert.AreEqual(0, rule.ApplyDiscount(basketItems));

            basketItems.Add(new BasketItem(new Product()
            {
                Name = "Bread", Price = 1
            }, 1));
            Assert.AreEqual(0, rule.ApplyDiscount(basketItems));

            basketItems.Add(new BasketItem(new Product()
            {
                Name = "Butter", Price = 0.8
            }, 1));
            Assert.AreEqual(0, rule.ApplyDiscount(basketItems));

            basketItems[2].Quantity++;
            Assert.AreEqual(0.5, rule.ApplyDiscount(basketItems));
        }
        public void Buy2ButtersGet1Bread50Off_IsApplicable_ShouldReturn_Correctly()
        {
            List <IBasketItem> basketItems = null;
            var rule = new Buy2ButtersGet1Bread50Off();

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

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

            basketItems.Add(new BasketItem(new Product()
            {
                Name = "Milk", Price = 1.15
            }, 1));
            Assert.IsFalse(rule.IsApplicable(basketItems));

            basketItems.Add(new BasketItem(new Product()
            {
                Name = "Bread", Price = 1
            }, 1));
            Assert.IsFalse(rule.IsApplicable(basketItems));

            basketItems.Add(new BasketItem(new Product()
            {
                Name = "Butter", Price = 0.8
            }, 1));
            Assert.IsFalse(rule.IsApplicable(basketItems));

            basketItems[2].Quantity++;
            Assert.IsTrue(rule.IsApplicable(basketItems));
        }