public async Task GetDiscountsAsync_WithSpecialOffers_ShouldReturnNoDiscounts()
        {
            //arrange
            var reducedProductId    = Guid.NewGuid();
            var reducedProductPrice = 1.00m;

            var mockSpecialOfferRepository = new Mock <IGenericRepository <SpecialOffer> >();

            mockSpecialOfferRepository.Setup(m => m.GetAllAsync(It.IsAny <Expression <Func <SpecialOffer, DiscountedProductsSpecialOffer> > >()))
            .ReturnsAsync(
                new List <SpecialOffer> ()
                );

            var basket = new Basket
            {
                Items = new List <BasketItem>
                {
                    new BasketItem {
                        Id = reducedProductId, Name = "Apples", Price = reducedProductPrice
                    },
                    new BasketItem {
                        Id = reducedProductId, Name = "Apples", Price = reducedProductPrice
                    },
                }
            };

            var reduceProductPriceByPercentDiscounts = new ReduceProductPriceByPercentDiscounts(mockSpecialOfferRepository.Object);

            //act
            var discounts = await reduceProductPriceByPercentDiscounts.GetDiscountsAsync(basket);

            //assert
            Assert.AreEqual(0, discounts.Count());
        }
        public async Task GetDiscountsAsync_WithNullBasket_ShouldThrowException()
        {
            //arrange
            var reduceProductPriceByPercentDiscounts = new ReduceProductPriceByPercentDiscounts(null);

            //act
            await reduceProductPriceByPercentDiscounts.GetDiscountsAsync(null);

            //assert
        }
        public async Task GetDiscountsAsync_WithProductsMeetingRequirement_ShouldReturnCorrectDiscount()
        {
            //arrange
            var reducedProductId    = Guid.NewGuid();
            var reducedProductPrice = 1.00m;
            var discountPercent     = 10;

            var mockSpecialOfferRepository = new Mock <IGenericRepository <SpecialOffer> >();

            mockSpecialOfferRepository.Setup(m => m.GetAllAsync(It.IsAny <Expression <Func <SpecialOffer, DiscountedProductsSpecialOffer> > >()))
            .ReturnsAsync(
                new List <SpecialOffer> {
                new SpecialOffer
                {
                    Name        = "SpecialOffer",
                    Description = "10 % off",
                    DiscountAssemblyFullName       = "Bjss.PriceBasket.Core.Services.ReduceProductPriceByPercentDiscounts, Bjss.PriceBasket.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
                    DiscountedProductsSpecialOffer = new DiscountedProductsSpecialOffer
                    {
                        DiscountedProductId = reducedProductId,
                        DiscountPercent     = discountPercent,
                        SpecialOffer        = new SpecialOffer {
                            Name        = "SpecialOffer",
                            Description = "10 % off"
                        }
                    }
                }
            }
                );

            var basket = new Basket
            {
                Items = new List <BasketItem>
                {
                    new BasketItem {
                        Id = reducedProductId, Name = "Apples", Price = reducedProductPrice
                    },
                    new BasketItem {
                        Id = reducedProductId, Name = "Apples", Price = reducedProductPrice
                    },
                }
            };

            var reduceProductPriceByPercentDiscounts = new ReduceProductPriceByPercentDiscounts(mockSpecialOfferRepository.Object);

            //act
            var discounts = await reduceProductPriceByPercentDiscounts.GetDiscountsAsync(basket);

            //assert
            Assert.AreEqual(2, discounts.Count());
            Assert.AreEqual(discounts.Sum(d => d.DiscountAmount), 0.20m);
        }
Exemple #4
0
        public async Task GetAsync_WhenNoSpecialOffersAvailable_ShouldReturnEmptyEnumerable()
        {
            //arrange
            var mockSpecialOfferRepository = new Mock <IGenericRepository <SpecialOffer> >();

            mockSpecialOfferRepository.Setup(m => m.GetAllAsync())
            .ReturnsAsync(
                Enumerable.Empty <SpecialOffer>()
                );

            var discount                      = new ReduceProductPriceByPercentDiscounts(mockSpecialOfferRepository.Object);
            var mockObjectFactory             = new Mock <IFactory>();
            var basketDiscountProviderFactory = new BasketDiscountProviderFactory(mockSpecialOfferRepository.Object, mockObjectFactory.Object);

            //act
            var discountProviders = await basketDiscountProviderFactory.GetAsync();

            //assert
            Assert.AreEqual(0, discountProviders.Count());
        }
Exemple #5
0
        public async Task GetAsync_WhenSpecialOffersAvailable_ShouldCreateDiscountsObjects()
        {
            //arrange
            var mockSpecialOfferRepository = new Mock <IGenericRepository <SpecialOffer> >();

            mockSpecialOfferRepository.Setup(m => m.GetAllAsync())
            .ReturnsAsync(
                new List <SpecialOffer> {
                new SpecialOffer
                {
                    Name = "SpecialOffer",
                    DiscountAssemblyFullName = "Bjss.PriceBasket.Core.Services.ReduceProductPriceByPercentDiscounts, Bjss.PriceBasket.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                }
            }
                );

            var discount = new ReduceProductPriceByPercentDiscounts(mockSpecialOfferRepository.Object);

            var mockObjectFactory = new Mock <IFactory>();

            mockObjectFactory.Setup(m => m.Get <IBasketDiscounts>(
                                        It.Is <string>(v => v == "Bjss.PriceBasket.Core.Services.ReduceProductPriceByPercentDiscounts, Bjss.PriceBasket.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"),
                                        It.IsAny <object>()))
            .Returns(discount);

            var basketDiscountProviderFactory = new BasketDiscountProviderFactory(mockSpecialOfferRepository.Object, mockObjectFactory.Object);

            //act
            var discountProviders = await basketDiscountProviderFactory.GetAsync();

            //assert
            Assert.AreEqual(1, discountProviders.Count());
            mockObjectFactory.Verify(m => m.Get <IBasketDiscounts>(
                                         It.Is <string>(v => v == "Bjss.PriceBasket.Core.Services.ReduceProductPriceByPercentDiscounts, Bjss.PriceBasket.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"),
                                         It.IsAny <object>()),
                                     Times.Once);
        }