public void When_I_generate_a_receipt_with_quantity_discount() { var sut = new ReceiptGenerator(); var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddQuantityDiscount("apple", 3, 2.00m); var transaction = new CheckoutTransaction(productCatalog, new Promotions(new List <IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog) })); transaction.AddItem("apple"); transaction.AddItem("banana"); transaction.AddItem("apple"); transaction.AddItem("apple"); transaction.AddItem("apple"); transaction.AddItem("apple"); transaction.AddItem("apple"); transaction.AddItem("apple"); var actual = sut.Generate(transaction); Assert.That(actual, Is.EqualTo("Receipt:\n7 apple @ $0.75 is $5.25\n***Discount on apple: Buy 3 apple for $2.00, New Price $4.75, Savings $0.50\n1 banana @ $1.00 is $1.00\nTotal is $5.75")); }
public void When_constructed_with_applicable_quantity_discount_but_no_matching_items() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddQuantityDiscount("apple", 2, 2.00m); var sut = new Bill(new List<string>() { "banana" }, productCatalog, new Promotions(new List<IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog)})); Assert.That(sut.Total, Is.EqualTo(1.00m)); Assert.That(sut.LineItems.Count(), Is.EqualTo(1)); }
public void When_product_catalog_is_added_to() { var sut = new ProductCatalog(); sut.AddProduct("apple", 0.75m); sut.AddProduct("banana", 1.00m); Assert.That(sut.Products.Count(), Is.EqualTo(2)); Assert.True(sut.Products.First(p => p.Barcode == "apple").Price == 0.75m); Assert.True(sut.Products.First(p => p.Barcode == "banana").Price == 1.00m); }
public void When_constructed_with_applicable_additional_item_discount() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddAdditionalItemDiscount("apple", 1, 1, 100); var sut = new Bill(new List<string>() { "apple", "banana", "apple", "apple", "apple", "apple" }, productCatalog, new Promotions(new List<IPromotionalDiscountRule>() {new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog)})); Assert.That(sut.Total, Is.EqualTo(3.25m)); Assert.That(sut.LineItems.Count(), Is.EqualTo(2)); Assert.That(sut.LineItems.ElementAt(0).PricePerUnit, Is.EqualTo(0.75m)); Assert.That(sut.LineItems.ElementAt(0).DiscountNote, Is.EqualTo("***Discount on apple: Buy 1 apple get 1 at $0.00, New Price $2.25, Savings $1.50")); }
protected void Page_Load(object sender, EventArgs e) { ProductCatalog pc = new ProductCatalog(); pc.AddProduct("Radiation Blaster 3000", 150M, "microwave.jpg"); pc.AddProduct("Fruit Ninja", 70M, "mixer.jpg"); pc.AddProduct("Toasty Buns", 20M, "toaster.jpg"); Response.Write(pc.GetCatalogHtml()); TaxableProduct tp = (TaxableProduct)pc.GetHighPricedProduct(); Response.Write("The high priced product is: " + tp.Name + " at a price of $" + tp.TotalPrice); }
protected void Page_Load(object sender, EventArgs e) { ProductCatalog productCatalog = new ProductCatalog(); productCatalog.AddProduct("Microwave", 12, "http://localhost:54097/C-Sharp/microwave.jpg"); productCatalog.AddProduct("Mixer", 120, "http://localhost:54097/C-Sharp/mixer.jpg"); productCatalog.AddProduct("Toaster", 2, "http://localhost:54097/C-Sharp/toaster.jpg"); Response.Write(productCatalog.GetCatalogHtml()); Response.Write("The highest priced item is: " + productCatalog.GetHighPricedProduct().Name + " " + productCatalog.GetHighPricedProduct().Price); }
public void When_constructed() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); var sut = new LineItem("apple", 2, productCatalog, new Promotions(new List<IPromotionalDiscountRule>())); Assert.That(sut.Barcode, Is.EqualTo("apple")); Assert.That(sut.Quantity, Is.EqualTo(2)); Assert.That(sut.PricePerUnit, Is.EqualTo(0.75m)); Assert.That(sut.SubTotal, Is.EqualTo(1.50m)); Assert.That(sut.DiscountNote, Is.EqualTo("")); }
protected void Page_Load(object sender, EventArgs e) { ProductCatalog pc = new ProductCatalog(); pc.AddProduct("The Scorcher", 1000, "microwave.jpg"); pc.AddProduct("The Whirlpool", 500, "mixer.jpg"); pc.AddProduct("Buns Burner", 700, "toaster.jpg"); Response.Write(pc.getCatalogHtml()); TaxableProduct highProd = (TaxableProduct)pc.GetHighPricedProduct(); Response.Write("The most Expensive product is: " + highProd.Name + " at $" + highProd.TotalPrice); }
public void When_constructed_with_some_items() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); var sut = new Bill(new List<string>() { "apple", "banana", "apple" }, productCatalog, new Promotions(new List<IPromotionalDiscountRule>())); Assert.That(sut.Total, Is.EqualTo(2.50m)); Assert.That(sut.LineItems.Count(), Is.EqualTo(2)); Assert.That(sut.LineItems.ElementAt(0).Barcode, Is.EqualTo("apple")); Assert.That(sut.LineItems.ElementAt(0).SubTotal, Is.EqualTo(1.50m)); Assert.That(sut.LineItems.ElementAt(1).Barcode, Is.EqualTo("banana")); Assert.That(sut.LineItems.ElementAt(1).SubTotal, Is.EqualTo(1.00m)); }
public void When_constructed() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); var sut = new LineItem("apple", 2, productCatalog, new Promotions(new List <IPromotionalDiscountRule>())); Assert.That(sut.Barcode, Is.EqualTo("apple")); Assert.That(sut.Quantity, Is.EqualTo(2)); Assert.That(sut.PricePerUnit, Is.EqualTo(0.75m)); Assert.That(sut.SubTotal, Is.EqualTo(1.50m)); Assert.That(sut.DiscountNote, Is.EqualTo("")); }
public void When_promotion_does_not_apply() { var productCatalog = new ProductCatalog(); productCatalog.AddAdditionalItemDiscount("apple", 1, 1, 100); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1m); var sut = new AdditionalItemDiscountRule(productCatalog); var promotions = new Promotions(new List<IPromotionalDiscountRule>() { sut }); var lineItem = new LineItem("banana", 7, productCatalog, promotions); var actual = sut.PromotionApplies(lineItem); Assert.That(actual, Is.False); }
public void When_add_some_items() { var expected = new List<string>() { "apple", "banana", "apple" }; var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); var sut = new CheckoutTransaction(productCatalog, new Promotions(new List<IPromotionalDiscountRule>())); sut.AddItem("apple"); sut.AddItem("banana"); sut.AddItem("apple"); Assert.That(sut.Bill.Total, Is.EqualTo(2.50m)); CollectionAssert.AreEquivalent(expected, sut.Items); }
public void When_constructed_with_quantity_discount() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddQuantityDiscount("apple", 3, 2.00m); var sut = new LineItem("apple", 7, productCatalog, new Promotions(new List<IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog) })); Assert.That(sut.Barcode, Is.EqualTo("apple")); Assert.That(sut.Quantity, Is.EqualTo(7)); Assert.That(sut.PricePerUnit, Is.EqualTo(0.75m)); Assert.That(sut.SubTotal, Is.EqualTo(5.25m)); Assert.That(sut.DiscountedSubTotal, Is.EqualTo(4.75m)); Assert.That(sut.DiscountNote, Is.EqualTo("***Discount on apple: Buy 3 apple for $2.00, New Price $4.75, Savings $0.50")); }
public void When_constructed_with_additional_item_discount() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddAdditionalItemDiscount("apple", 1, 1, 100); var sut = new LineItem("apple", 5, productCatalog, new Promotions(new List<IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog)})); Assert.That(sut.Barcode, Is.EqualTo("apple")); Assert.That(sut.Quantity, Is.EqualTo(5)); Assert.That(sut.PricePerUnit, Is.EqualTo(0.75m)); Assert.That(sut.SubTotal, Is.EqualTo(3.75m)); Assert.That(sut.DiscountedSubTotal, Is.EqualTo(2.25m)); Assert.That(sut.DiscountNote, Is.EqualTo("***Discount on apple: Buy 1 apple get 1 at $0.00, New Price $2.25, Savings $1.50")); }
public void When_I_generate_a_receipt_with_regular_prices() { var sut = new ReceiptGenerator(); var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); var transaction = new CheckoutTransaction(productCatalog, new Promotions(new List <IPromotionalDiscountRule>())); transaction.AddItem("apple"); transaction.AddItem("banana"); transaction.AddItem("apple"); var actual = sut.Generate(transaction); Assert.That(actual, Is.EqualTo("Receipt:\n2 apple @ $0.75 is $1.50\n1 banana @ $1.00 is $1.00\nTotal is $2.50")); }
public void ProductCatalog_ShouldReturn_ProductPrice_ByPassingProductName() { ProductCatalog productCatalog = new ProductCatalog(); productCatalog.AddProduct('A', 30); var price = productCatalog.GetPrice('A'); Assert.AreEqual(price, 30); }
public void ProductCatalog_ShouldReturnZero_When_ProductNotFound() { ProductCatalog productCatalog = new ProductCatalog(); productCatalog.AddProduct('A', 30); var price = productCatalog.GetPrice('B'); Assert.AreEqual(price, 0); }
public void When_constructed_with_applicable_quantity_discount_but_no_matching_items() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddQuantityDiscount("apple", 2, 2.00m); var sut = new Bill(new List <string>() { "banana" }, productCatalog, new Promotions(new List <IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog) })); Assert.That(sut.Total, Is.EqualTo(1.00m)); Assert.That(sut.LineItems.Count(), Is.EqualTo(1)); }
public void When_constructed_with_some_items() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); var sut = new Bill(new List <string>() { "apple", "banana", "apple" }, productCatalog, new Promotions(new List <IPromotionalDiscountRule>())); Assert.That(sut.Total, Is.EqualTo(2.50m)); Assert.That(sut.LineItems.Count(), Is.EqualTo(2)); Assert.That(sut.LineItems.ElementAt(0).Barcode, Is.EqualTo("apple")); Assert.That(sut.LineItems.ElementAt(0).SubTotal, Is.EqualTo(1.50m)); Assert.That(sut.LineItems.ElementAt(1).Barcode, Is.EqualTo("banana")); Assert.That(sut.LineItems.ElementAt(1).SubTotal, Is.EqualTo(1.00m)); }
public void When_promotion_does_not_apply() { var productCatalog = new ProductCatalog(); productCatalog.AddQuantityDiscount("apple", 3, 2); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1m); var sut = new QuantityDiscountRule(productCatalog); var promotions = new Promotions(new List <IPromotionalDiscountRule>() { sut }); var lineItem = new LineItem("banana", 7, productCatalog, promotions); var actual = sut.PromotionApplies(lineItem); Assert.That(actual, Is.False); }
public void When_add_some_items() { var expected = new List <string>() { "apple", "banana", "apple" }; var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); var sut = new CheckoutTransaction(productCatalog, new Promotions(new List <IPromotionalDiscountRule>())); sut.AddItem("apple"); sut.AddItem("banana"); sut.AddItem("apple"); Assert.That(sut.Bill.Total, Is.EqualTo(2.50m)); CollectionAssert.AreEquivalent(expected, sut.Items); }
public void When_constructed_with_additional_item_discount() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddAdditionalItemDiscount("apple", 1, 1, 100); var sut = new LineItem("apple", 5, productCatalog, new Promotions(new List <IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog) })); Assert.That(sut.Barcode, Is.EqualTo("apple")); Assert.That(sut.Quantity, Is.EqualTo(5)); Assert.That(sut.PricePerUnit, Is.EqualTo(0.75m)); Assert.That(sut.SubTotal, Is.EqualTo(3.75m)); Assert.That(sut.DiscountedSubTotal, Is.EqualTo(2.25m)); Assert.That(sut.DiscountNote, Is.EqualTo("***Discount on apple: Buy 1 apple get 1 at $0.00, New Price $2.25, Savings $1.50")); }
public void When_constructed_with_quantity_discount() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddQuantityDiscount("apple", 3, 2.00m); var sut = new LineItem("apple", 7, productCatalog, new Promotions(new List <IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog) })); Assert.That(sut.Barcode, Is.EqualTo("apple")); Assert.That(sut.Quantity, Is.EqualTo(7)); Assert.That(sut.PricePerUnit, Is.EqualTo(0.75m)); Assert.That(sut.SubTotal, Is.EqualTo(5.25m)); Assert.That(sut.DiscountedSubTotal, Is.EqualTo(4.75m)); Assert.That(sut.DiscountNote, Is.EqualTo("***Discount on apple: Buy 3 apple for $2.00, New Price $4.75, Savings $0.50")); }
public IActionResult OnPost() { if (!ModelState.IsValid) { return(Page()); } catalog.AddProduct(Product); return(RedirectToPage("GetAllProducts")); }
public void When_constructed_with_applicable_additional_item_discount() { var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); productCatalog.AddProduct("banana", 1.00m); productCatalog.AddAdditionalItemDiscount("apple", 1, 1, 100); var sut = new Bill(new List <string>() { "apple", "banana", "apple", "apple", "apple", "apple" }, productCatalog, new Promotions(new List <IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog) })); Assert.That(sut.Total, Is.EqualTo(3.25m)); Assert.That(sut.LineItems.Count(), Is.EqualTo(2)); Assert.That(sut.LineItems.ElementAt(0).PricePerUnit, Is.EqualTo(0.75m)); Assert.That(sut.LineItems.ElementAt(0).DiscountNote, Is.EqualTo("***Discount on apple: Buy 1 apple get 1 at $0.00, New Price $2.25, Savings $1.50")); }
public void Begin() { if (!_cartData.Any()) { _consoleWriter.WriteLine("Error cart is empty"); return; } var productCatalog = new ProductCatalog(); foreach (var productCatalogLine in _productCatalogData) { var parts = productCatalogLine.Split(','); if (parts[0] == "PRODUCT") { var barcode = parts[1].Trim(); var price = Decimal.Parse(parts[2]); productCatalog.AddProduct(barcode, price); } else if (parts[0] == "QUANTITY_DISCOUNT") { var barcode = parts[1].Trim(); var quantity = Convert.ToInt32(parts[2]); var discountPrice = Convert.ToDecimal(parts[3]); productCatalog.AddQuantityDiscount(barcode, quantity, discountPrice); } else if (parts[0] == "ADDITIONAL_ITEM_DISCOUNT") { var barcode = parts[1].Trim(); var quantity = Convert.ToInt32(parts[2]); var quantityDiscounted = Convert.ToInt32(parts[3]); var dicountPercentage = Convert.ToDouble(parts[4]); productCatalog.AddAdditionalItemDiscount(barcode, quantity, quantityDiscounted, dicountPercentage); } } var promotionalDiscountRules = new List <IPromotionalDiscountRule>() { new AdditionalItemDiscountRule(productCatalog), new QuantityDiscountRule(productCatalog) }; var transaction = new CheckoutTransaction(productCatalog, new Promotions(promotionalDiscountRules)); foreach (var cartLine in _cartData) { transaction.AddItem(cartLine); } var reportGenerator = new ReceiptGenerator(); var receipt = reportGenerator.Generate(transaction); _consoleWriter.WriteLine(receipt); }
public void When_promotion_applies() { var productCatalog = new ProductCatalog(); productCatalog.AddQuantityDiscount("apple", 3, 2); productCatalog.AddProduct("apple", 0.75m); var sut = new QuantityDiscountRule(productCatalog); var promotions = new Promotions(new List<IPromotionalDiscountRule>() { sut }); var lineItem = new LineItem("apple", 7, productCatalog, promotions); var actual = sut.PromotionApplies(lineItem); Assert.That(actual, Is.True); }
public void When_no_promotion_applies() { var rule = new Mock<IPromotionalDiscountRule>(); rule.Setup(p => p.PromotionApplies(It.IsAny<LineItem>())).Returns(false); var sut = new Promotions(new List<IPromotionalDiscountRule>() { rule.Object }); var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); var lineItem = new LineItem("apple", 7, productCatalog, sut); var actual = sut.CalculatePromotionalCost(lineItem); Assert.That(actual.DiscountedSubTotal, Is.EqualTo(lineItem.SubTotal)); Assert.That(actual.DiscountNote, Is.EqualTo("")); }
public void When_calculating_rule() { var productCatalog = new ProductCatalog(); productCatalog.AddQuantityDiscount("apple", 3, 2); productCatalog.AddProduct("apple", 0.75m); var sut = new QuantityDiscountRule(productCatalog); var promotions = new Promotions(new List<IPromotionalDiscountRule>() { sut }); var lineItem = new LineItem("apple", 7, productCatalog, promotions); var actual = sut.Calculate(lineItem); Assert.That(actual.DiscountedSubTotal, Is.EqualTo(4.75m)); Assert.That(actual.DiscountNote, Is.EqualTo("***Discount on apple: Buy 3 apple for $2.00, New Price $4.75, Savings $0.50")); }
protected void Page_Load(object sender, EventArgs e) { // populate a new catalog var catalog = new ProductCatalog(); catalog.AddProduct("Nukulizer 1945", 39.99M, "microwave.jpg"); catalog.AddProduct("Sir Mix-a-Lot", 599.99M, "mixer.jpg"); catalog.AddProduct("The Cylon", 1.99M, "toaster.jpg"); // write catalog to screen Response.Write(catalog.GetCatalogHtml()); // write priciest product to screen AS a TaxableProduct TaxableProduct priceyProduct = catalog.GetHighPricedProduct() as TaxableProduct; if (priceyProduct != null) { StringBuilder builder = new StringBuilder(); builder.AppendFormat( "<p>{0} is the most expensive product at {1:C} (including tax), {2:C} (excluding tax).</p>", priceyProduct.Name, priceyProduct.TotalPrice, priceyProduct.Price); Response.Write(builder.ToString()); } }
public void When_calculating_rule() { var productCatalog = new ProductCatalog(); productCatalog.AddAdditionalItemDiscount("apple", 1, 1, 100); productCatalog.AddProduct("apple", 0.75m); var sut = new AdditionalItemDiscountRule(productCatalog); var promotions = new Promotions(new List<IPromotionalDiscountRule>() { sut }); var lineItem = new LineItem("apple", 7, productCatalog, promotions); var actual = sut.Calculate(lineItem); Assert.That(actual.DiscountedSubTotal, Is.EqualTo(3m)); Assert.That(actual.DiscountNote, Is.EqualTo("***Discount on apple: Buy 1 apple get 1 at $0.00, New Price $3.00, Savings $2.25")); }
public void When_promotion_applies() { var productCatalog = new ProductCatalog(); productCatalog.AddAdditionalItemDiscount("apple", 1, 1, 100); productCatalog.AddProduct("apple", 0.75m); var sut = new AdditionalItemDiscountRule(productCatalog); var promotions = new Promotions(new List <IPromotionalDiscountRule>() { sut }); var lineItem = new LineItem("apple", 7, productCatalog, promotions); var actual = sut.PromotionApplies(lineItem); Assert.That(actual, Is.True); }
public void When_calculating_rule() { var productCatalog = new ProductCatalog(); productCatalog.AddAdditionalItemDiscount("apple", 1, 1, 100); productCatalog.AddProduct("apple", 0.75m); var sut = new AdditionalItemDiscountRule(productCatalog); var promotions = new Promotions(new List <IPromotionalDiscountRule>() { sut }); var lineItem = new LineItem("apple", 7, productCatalog, promotions); var actual = sut.Calculate(lineItem); Assert.That(actual.DiscountedSubTotal, Is.EqualTo(3m)); Assert.That(actual.DiscountNote, Is.EqualTo("***Discount on apple: Buy 1 apple get 1 at $0.00, New Price $3.00, Savings $2.25")); }
public void When_calculating_rule() { var productCatalog = new ProductCatalog(); productCatalog.AddQuantityDiscount("apple", 3, 2); productCatalog.AddProduct("apple", 0.75m); var sut = new QuantityDiscountRule(productCatalog); var promotions = new Promotions(new List <IPromotionalDiscountRule>() { sut }); var lineItem = new LineItem("apple", 7, productCatalog, promotions); var actual = sut.Calculate(lineItem); Assert.That(actual.DiscountedSubTotal, Is.EqualTo(4.75m)); Assert.That(actual.DiscountNote, Is.EqualTo("***Discount on apple: Buy 3 apple for $2.00, New Price $4.75, Savings $0.50")); }
public void When_no_promotion_applies() { var rule = new Mock <IPromotionalDiscountRule>(); rule.Setup(p => p.PromotionApplies(It.IsAny <LineItem>())).Returns(false); var sut = new Promotions(new List <IPromotionalDiscountRule>() { rule.Object }); var productCatalog = new ProductCatalog(); productCatalog.AddProduct("apple", 0.75m); var lineItem = new LineItem("apple", 7, productCatalog, sut); var actual = sut.CalculatePromotionalCost(lineItem); Assert.That(actual.DiscountedSubTotal, Is.EqualTo(lineItem.SubTotal)); Assert.That(actual.DiscountNote, Is.EqualTo("")); }