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); }
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()); }
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); }