public void When_checkout_transaction_is_created() { var productCatalog = new ProductCatalog(); var sut = new CheckoutTransaction(productCatalog, new Promotions(new List <IPromotionalDiscountRule>())); Assert.That(sut.Bill.Total, Is.EqualTo(0)); }
public void When_checkout_transaction_is_created() { var productCatalog = new ProductCatalog(); var sut = new CheckoutTransaction(productCatalog, new Promotions(new List<IPromotionalDiscountRule>())); Assert.That(sut.Bill.Total, Is.EqualTo(0)); }
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")); }
private string AddRegularPriceLineItem(CheckoutTransaction transaction, string barcode) { var lineItem = transaction.Bill.LineItems.SingleOrDefault(i => i.Barcode == barcode); var output = ""; if (lineItem != null) { var note = lineItem.DiscountNote + (string.IsNullOrEmpty(lineItem.DiscountNote) ? "" : "\n"); output = $"{lineItem.Quantity} {lineItem.Barcode} @ {lineItem.PricePerUnit:C2} is {lineItem.SubTotal:C2}\n{note}"; } return(output); }
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 string Generate(CheckoutTransaction transaction) { var receipt = "Receipt:\n"; foreach (var barcode in transaction.Items.GroupBy(i => i, i => i, (k, j) => k)) { receipt += AddRegularPriceLineItem(transaction, barcode); } receipt += $"Total is {transaction.Bill.Total:C2}"; return(receipt); }
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_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 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); }