Esempio n. 1
0
        private static Basket GetBasketInstance()
        {
            var discountFactory = new DiscountRuleFactory();
            var calculator      = new BasketPriceCalculator(discountFactory);

            return(new Basket(calculator));
        }
        public void BasketCalculatorShouldCorrectlyCalculateFinalOutput()
        {
            var products      = new[] { "Apples", "Milk", "Bread" };
            var basketBuilder = new Mock <IBasketBuilder>();
            var discountType  = new Offer {
                DiscountCode = "TenPercentOff", DiscountDetail = "Apples 10% off", ProductId = 1
            };
            var basketItems = new List <BasketItem>
            {
                new BasketItem
                {
                    ProductId     = 1,
                    OfferType     = discountType,
                    NumberOfItems = 1,
                    PricePerItem  = 100
                },
                new BasketItem
                {
                    ProductId     = 2,
                    OfferType     = null,
                    NumberOfItems = 1,
                    PricePerItem  = 130,
                },
                new BasketItem
                {
                    OfferType     = null,
                    ProductId     = 3,
                    NumberOfItems = 1,
                    PricePerItem  = 80
                }
            };

            basketBuilder.Setup(builder => builder.Build(products)).Returns(
                basketItems
                );
            var discountCalculator = new Mock <IDiscountCalculator>();

            var validDiscounts = new List <ValidDiscount>
            {
                new ValidDiscount
                {
                    DiscountAmount = 10.0m,
                    OfferType      = discountType
                }
            };

            discountCalculator.Setup(calculator => calculator.GetDiscountsApplied(basketItems)).Returns(
                validDiscounts);
            var expectedResult = new[]
            {
                "Subtotal: £3.10",
                "Apples 10% off: -10p",
                "Total: £3.00"
            };
            var sut          = new BasketPriceCalculator(discountCalculator.Object, basketBuilder.Object);
            var actualResult = sut.Calculate(products);

            CollectionAssert.AreEqual(expectedResult.ToList(), actualResult.ToList());
        }
Esempio n. 3
0
        public void CalculatorSumsRightAmountOnSingleBook()
        {
            var basket = new Basket();

            basket.Add(Book.A);

            var basketCalculator = new BasketPriceCalculator(basket, 8m);

            var discountedBasketTotal = basketCalculator.CalculateBasketTotal();

            Assert.Equal(8m, discountedBasketTotal);
        }
Esempio n. 4
0
        public void CalculatorSumsRightAmountOnSingleDistinctGroupOfBooks()
        {
            var basket = new Basket();

            basket.Add(Book.A);
            basket.Add(Book.B);
            basket.Add(Book.C);
            basket.Add(Book.D);
            basket.Add(Book.E);

            var basketCalculator = new BasketPriceCalculator(basket, 8m);

            var discountedBasketTotal = basketCalculator.CalculateBasketTotal();

            Assert.Equal(30m, discountedBasketTotal);
        }
Esempio n. 5
0
        public void GivenBasketItem_Percentage_WhenApplyDiscount_ThenItemIsUpdatedCorrectly()
        {
            var discountFactory = new DiscountRuleFactory();
            var calculator      = new BasketPriceCalculator(discountFactory);

            var item = new BasketItem
            {
                Quantity           = 2,
                AfterDiscountPrice = 0,
                DiscountParameter  = 10,
                DiscountRuleType   = DiscountRuleType.Percentage,
                Product            = new Product
                {
                    Price = (decimal)20.10
                }
            };

            calculator.ApplyDiscount(item);

            Assert.AreEqual(36.18, item.AfterDiscountPrice);
        }
Esempio n. 6
0
        public void GivenBasketItem_Buy2Get1Free_WhenApplyDiscount_ThenItemIsUpdatedCorrectly()
        {
            var discountFactory = new DiscountRuleFactory();
            var calculator      = new BasketPriceCalculator(discountFactory);

            var item = new BasketItem
            {
                Quantity           = 3,
                AfterDiscountPrice = (decimal)10.50,
                DiscountRuleType   = DiscountRuleType.BuyManyGetOneFree,
                DiscountParameter  = 3,
                Product            = new Product
                {
                    Price = (decimal)10.50
                }
            };

            calculator.ApplyDiscount(item);

            Assert.AreEqual(21, item.AfterDiscountPrice);
        }
Esempio n. 7
0
        public void GivenBasketItems_WhenCalculateTotal_ThenReturnsCorrectTotal()
        {
            var discountFactory = new DiscountRuleFactory();
            var calculator      = new BasketPriceCalculator(discountFactory);

            var item = new BasketItem
            {
                Quantity           = 2,
                AfterDiscountPrice = (decimal)10.50,
                DiscountRuleType   = DiscountRuleType.BuyManyGetOneFree,
                DiscountParameter  = 2,
                Product            = new Product
                {
                    Price = (decimal)10.50
                }
            };

            var items = Enumerable.Repeat(item, 3);
            var total = calculator.CalculateTotal(items);

            Assert.AreEqual(31.50, total);
        }