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 void ShoppingBasket_CheckCalculateTotalPrice_WithNoDiscounts() { // Arrange var shoppingBasket = new ShoppingBasket(new List <IDiscount>()); shoppingBasket.AddProducts(ProductQuantityHelper.CreateProducts()); // Act var result = shoppingBasket.SubTotal - shoppingBasket.GetBasketDiscounts().Sum(item => item.Amount); // Assert Assert.AreEqual(result, 3.23m); }
public void ShoppingBasket_AddProducts_CheckProductsCount(int productsToCreate) { // Arrange var shoppingBasket = new ShoppingBasket(new List <IDiscount>()); shoppingBasket.AddProducts(ProductQuantityHelper.CreateProducts(productsToCreate)); // Act var result = shoppingBasket.ProductCount; // Assert Assert.AreEqual(result, productsToCreate); }
public void PercentageDiscount_CalculateAppliedDiscount_With50PercentDiscount() { // Arrange var percentageDiscount = new PercentageDiscount(DiscountHelper.CreateDiscountedProducts(), 0.50m); // Act var result = percentageDiscount.DiscountsApplicable(ProductQuantityHelper.CreateProducts()).ToArray(); // Assert Assert.AreEqual(result.Any(), true); Assert.AreEqual(result[0].Type, DiscountType.Percentage); Assert.AreEqual(result[0].Amount, 0.16m); Assert.AreEqual(result[0].Text, "Apples 50% OFF: - 16p"); }
public void PercentageDiscount_NoDiscountApplied_With10PercentDiscount() { // Arrange var percentageDiscount = new PercentageDiscount(new DiscountedProduct { ProductId = 4, Name = "Milk" }, 0.10m); // Act var result = percentageDiscount.DiscountsApplicable(ProductQuantityHelper.CreateProducts()).ToArray(); // Assert Assert.AreEqual(result.Any(), false); }
public void ShoppingBasket_CheckCalculateTotalPrice_WithHalfPriceDiscount() { // Arrange var halfPriceDiscount = new Mock <IDiscount>(); halfPriceDiscount.Setup(mock => mock.DiscountsApplicable(It.IsAny <IEnumerable <ProductQuantity> >())) .Returns(DiscountHelper.CreateHalfPriceAppliedDiscount); var shoppingBasket = new ShoppingBasket(new List <IDiscount> { halfPriceDiscount.Object }); shoppingBasket.AddProducts(ProductQuantityHelper.CreateProducts()); // Act var discountsTotal = shoppingBasket.GetBasketDiscounts().Sum(item => item.Amount); var result = shoppingBasket.SubTotal - discountsTotal; // Assert Assert.AreEqual(result, 2.83m); }
public void ShoppingBasket_GetBasketDiscounts_WithNoDiscountApplied() { // Arrange var discounts = new Mock <IDiscount>(); discounts.Setup(mock => mock.DiscountsApplicable(It.IsAny <IEnumerable <ProductQuantity> >())) .Returns(DiscountHelper.CreateNoDiscountApplied); var shoppingBasket = new ShoppingBasket(new List <IDiscount> { discounts.Object }); shoppingBasket.AddProducts(ProductQuantityHelper.CreateProducts()); // Act var result = shoppingBasket.GetBasketDiscounts().ToArray(); // Assert Assert.AreEqual(result.Any(), true); Assert.AreEqual(result[0].Type, DiscountType.None); Assert.AreEqual(result[0].Amount, 0.00m); Assert.AreEqual(result[0].Text, "(No offers available)"); }
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); }