示例#1
0
        public void Offer_Every_Fourth_Milk_Free()
        {
            var milkOffer = new MilkOffer();
            var products  = Enumerable.Repeat(ProductMocks.Milk, 4);

            Func <IEnumerable <Product>, decimal> discountCalculator = milkOffer.GetDiscountCalculator();
            var discount = discountCalculator(products);

            Assert.AreEqual(1.15m, discount);
        }
示例#2
0
        public void Basket_4Milk_Total_3Pounds45()
        {
            var basket   = new Basket();
            var products = Enumerable.Repeat(ProductMocks.Milk, 4);

            basket.AddProducts(products);
            var milkOffer = new MilkOffer();

            decimal total = basket
                            .WithOffers(milkOffer)
                            .GetTotal();

            Assert.AreEqual(3.45m, total);
        }
示例#3
0
        public void Basket_Duplicate_Offers_DoNot_Cumulate()
        {
            var basket   = new Basket();
            var products = Enumerable.Repeat(ProductMocks.Milk, 8).ToList();

            products.AddRange(new List <Product>
            {
                ProductMocks.Bread,
                ProductMocks.Butter,
                ProductMocks.Butter
            });
            Enumerable.Repeat(ProductMocks.Milk, 8);
            basket.AddProducts(products);
            var butterOffer = new ButterOffer();
            var milkOffer   = new MilkOffer();

            decimal total = basket
                            .WithOffers(butterOffer, milkOffer, milkOffer, butterOffer)
                            .GetTotal();

            Assert.AreEqual(9, total);
        }