public void TestInitialize() { _items = new Items(); _halfPriceDiscountItem = new HalfPriceDiscountItem(); _halfPriceDiscount = new HalfPriceDiscount(_halfPriceDiscountItem, _items); }
public void PercentageDiscount_CalculateAppliedDiscount_HalfPriceDiscount() { var basket = new List <ProductQuantity>(); var discounts = new List <IDiscount>(); var product = new Product() { Id = 1, Name = "Apples", Price = 100m }; var productQuantity = new ProductQuantity() { Quantity = 1, Product = product }; basket.Add(productQuantity); var percentageDiscount = new HalfPriceDiscount(product, productQuantity); discounts.Add(percentageDiscount); var sut = new DiscountService(); // Act var result = sut.CalculateBasketDiscounts(basket, discounts); // Assert Assert.Equal(result.Any(), true); Assert.Equal(result[0].Type, DiscountType.HalfPrice); Assert.Equal(result[0].Amount, 50.00m); Assert.Equal(result[0].Description, "Apples 50% OFF: - 50p"); }
public void HalfPriceDiscount_CalculateAppliedDiscount_WithQuantity_4OrMore() { // Arrange var percentageDiscount = new HalfPriceDiscount(new ProductQuantity { Product = new Product { ProductId = 2, Name = "Beans" }, Quantity = 4 }, new DiscountedProduct() { ProductId = 3, Name = "Bread" }); // Act var result = percentageDiscount.DiscountsApplicable(ProductQuantityHelper.CreateProductsForHalfPriceDiscounts()).ToArray(); // Assert Assert.AreEqual(result.Any(), true); Assert.AreEqual(result[0].Type, DiscountType.HalfPrice); Assert.AreEqual(result[0].Amount, 0.40m); Assert.AreEqual(result[0].Text, "Bread 50% OFF: - 40p"); }
public async Task <List <IDiscount> > GetProductDiscounts() { var result = new List <IDiscount>(); await Task.Delay(2); var productDiscont1 = new PercentageDiscount(GetProductById(4), 0.10m); result.Add(productDiscont1); var productDiscont2 = new HalfPriceDiscount(GetProductById(2), new ProductQuantity() { Product = GetProductById(1), Quantity = 2 }); result.Add(productDiscont2); return(result); }
public void HalfPriceDiscount_NoDiscountApplied_WithQuantity_20rMore() { // Arrange var percentageDiscount = new HalfPriceDiscount(new ProductQuantity { Product = new Product { ProductId = 2, Name = "Beans" }, Quantity = 2 }, new DiscountedProduct() { ProductId = 4, Name = "Milk" }); // Act var result = percentageDiscount.DiscountsApplicable(ProductQuantityHelper.CreateProducts()).ToArray(); // Assert Assert.AreEqual(result.Any(), false); }
public void RandomProductFor_PercentageDiscount_CalculateAppliedDiscount_HalfPriceDiscount(List <Product> products, HalfPriceDiscount halfPriceDiscount) { var discountRate = 0.5m; // Arrange halfPriceDiscount._productsThatQualifyBasketforDiscount.Quantity = 1; var productNames = products.Select(x => x.Name).ToList(); productNames.Add(halfPriceDiscount._discountedProduct.Name); productNames.Add(halfPriceDiscount._productsThatQualifyBasketforDiscount.Product.Name); var disconts = new List <IDiscount>(); disconts.Add(halfPriceDiscount); _productService.Setup(x => x.GetProductByName(halfPriceDiscount._discountedProduct.Name)).Returns(halfPriceDiscount._discountedProduct); _productService.Setup(x => x.GetProductByName(halfPriceDiscount._productsThatQualifyBasketforDiscount.Product.Name)).Returns(halfPriceDiscount._productsThatQualifyBasketforDiscount.Product); foreach (var item in products) { _productService.Setup(x => x.GetProductByName(item.Name)).Returns(item); } var sut = new ShoppingBasketService(_productService.Object); var basket = sut.AddProducts(productNames.ToArray()); var sutD = new DiscountService(); // Act var result = sutD.CalculateBasketDiscounts(basket, disconts); var subTotalPrice = basket.Sum(item => item.Product.Price * item.Quantity); var totalPrice = subTotalPrice - result.Sum(item => item.Amount); var discontMessage = string.Join(" --- ", result.Select(x => x.Description)); // Assert Assert.Equal(subTotalPrice - totalPrice, halfPriceDiscount._discountedProduct.Price * discountRate); }
public void HalfPriceDiscount_DiscountedProduct_IsNull_ExceptionThrown() { // Arrange + Act + Assert var halfPriceDiscount = new HalfPriceDiscount(new ProductQuantity(), null); }
public void HalfPriceDiscount_ProductsThatQualifyBasketforDiscount_IsNull_ExceptionThrown() { // Arrange + Act + Assert var halfPriceDiscount = new HalfPriceDiscount(null, new DiscountedProduct()); }