public void Given_BulkDiscountIsCreated_ThenReturnsBaseClassType() { var product = new ProductUnit("Book", 10.0m); var bulkDiscount = new BulkDiscount(product, "Buy 2 gets 1 free", 2, 1); Assert.IsAssignableFrom <Discount>(bulkDiscount); }
private IFinalPrice UseBulkDiscount(IFinalPrice cart, ref string view) { var bulkDiscount = new BulkDiscount(cart, _discountVariablesRepository); bulkDiscount.AdjustPriceByBulkDiscount(); view += "Bulk discount adjustment : $" + cart.GetAdjustment() * -1 + " \n"; view += "Price after bulk discount : $" + cart.GetFinalPrice() + " \n"; return(bulkDiscount.AdjustedCart); }
public void Given_BulkDiscount_WhenCreateBulkDiscount_ThenReturns_BulkDiscountObject() { var product = new ProductUnit("Book", 10.0m); var bulkDiscount = new BulkDiscount(product, "Buy 2 gets 1 free", 2, 1); Assert.NotNull(bulkDiscount.Product); Assert.Equal("Buy 2 gets 1 free", bulkDiscount.Name); Assert.Equal(2, bulkDiscount.ThresholdQuantity); Assert.Equal(1, bulkDiscount.QuantityOff); }
public void Cannot_calculate_bulk_discount_for_invalid_cart_products_list() { //setup var bulkDiscountProduct = new Product(code: "9501101530003", name: "Nutella", price: 5); var bulkDiscountList = new BulkDiscount(bulkDiscountProducts: new[] { bulkDiscountProduct }, quantity: 2); Assert.Throws <ApplicationException>(() => bulkDiscountList.Calculate(cartProducts: null, cartSubtotal: 100)); Assert.Throws <ApplicationException>(() => bulkDiscountList.Calculate(cartProducts: new List <CartProduct>(), cartSubtotal: 100)); }
public void Can_calculate_price_for_bulk_discount_product() { //setup var product = new Product(code: "9501101530004", name: "Nutella", price: 5); var bulkDiscountList = new BulkDiscount(bulkDiscountProducts: new[] { product }, quantity: 3); var sut = new CashRegister(products: new[] { product }, discounts: new [] { bulkDiscountList }); //act sut.Scan(product.Code); sut.Scan(product.Code); sut.Scan(product.Code); var totalPrice = sut.CalculatePrice(); //3 * 5 - 5 = 10 Assert.That(totalPrice, Is.EqualTo(10m)); }
public void Can_calculate_price_for_bulk_discount_product_and_regular_price_product() { //setup var regularPriceProduct = new Product(code: "9501101530004", name: "Chewing gum", price: 1.50m); var bulkDiscountProduct = new Product(code: "9501101530003", name: "Nutella", price: 5); var bulkDiscountList = new BulkDiscount(bulkDiscountProducts: new[] { bulkDiscountProduct }, quantity: 2); var sut = new CashRegister(products: new[] { regularPriceProduct, bulkDiscountProduct }, discounts: new[] { bulkDiscountList }); //act sut.Scan(regularPriceProduct.Code); sut.Scan(regularPriceProduct.Code); sut.Scan(bulkDiscountProduct.Code); sut.Scan(bulkDiscountProduct.Code); sut.Scan(bulkDiscountProduct.Code); var totalPrice = sut.CalculatePrice(); //(1.50 * 2) + (5 * 3) - 5 = 13 Assert.That(totalPrice, Is.EqualTo(13m)); }
public void Can_get_several_bulk_discounts() { /* TODO: need to implement further calculation for cases * like the following: * if product quantity required to get a discount is 2, but * shopping cart has 4 such products */ //setup var product = new Product(code: "9501101530004", name: "Nutella", price: 5); var bulkDiscountProduct = new BulkDiscount(bulkDiscountProducts: new[] { product }, quantity: 2); var sut = new CashRegister(new[] { product }, new[] { bulkDiscountProduct }); //act sut.Scan(product.Code); sut.Scan(product.Code); sut.Scan(product.Code); sut.Scan(product.Code); var totalPrice = sut.CalculatePrice(); Assert.That(totalPrice, Is.EqualTo(10)); }