Beispiel #1
0
        public async Task Retrieving_A_Basket_Should_Apply_Special_Offers()
        {
            var mockProductManager     = new Mock <IProductManager>();
            var basketRepository       = new Mock <IBasketRepository>();
            var specialOfferRepository = new Mock <ISpecialOfferRepository>();

            mockProductManager.Setup(x => x.GetAllProducts()).ReturnsAsync(() => productList);
            basketRepository.Setup(x => x.GetBasket()).ReturnsAsync(() => basketItems);
            specialOfferRepository.Setup(x => x.GetSpecialOffersForProduct("B15")).ReturnsAsync(() =>
                                                                                                new List <SpecialOffer>
            {
                new SpecialOffer
                {
                    Price    = 0.45m,
                    Quantity = 2,
                    SKU      = "B15"
                }
            });
            specialOfferRepository.Setup(x => x.GetSpecialOffersForProduct("A99")).ReturnsAsync(() =>
                                                                                                new List <SpecialOffer>());
            var basketManager = new BasketManager(mockProductManager.Object, basketRepository.Object,
                                                  specialOfferRepository.Object);

            var result = await basketManager.GetCurrentBasket();

            //Two different distinct item types. (2 A99's, 3 B15's)
            result.Items.Count.Should().Be(2);
            result.Total.Should().Be(1.75m);
            //0.50 + 0.50 + 0.45 (2 products discounted) + 0.30
        }