コード例 #1
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"));
        }
コード例 #2
0
ファイル: BillTests.cs プロジェクト: BDDCloud/GroceryCoKiosk
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: BillTests.cs プロジェクト: BDDCloud/GroceryCoKiosk
        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"));
        }
コード例 #5
0
    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);
    }
コード例 #6
0
    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);
    }
コード例 #7
0
        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(""));
        }
コード例 #8
0
    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);
    }
コード例 #9
0
    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);
    }
コード例 #10
0
ファイル: BillTests.cs プロジェクト: BDDCloud/GroceryCoKiosk
        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));
        }
コード例 #11
0
        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(""));
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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"));
        }
コード例 #15
0
        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"));
        }
コード例 #16
0
        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"));
        }
コード例 #17
0
        public void ProductCatalog_ShouldReturn_ProductPrice_ByPassingProductName()
        {
            ProductCatalog productCatalog = new ProductCatalog();

            productCatalog.AddProduct('A', 30);
            var price = productCatalog.GetPrice('A');

            Assert.AreEqual(price, 30);
        }
コード例 #18
0
        public void ProductCatalog_ShouldReturnZero_When_ProductNotFound()
        {
            ProductCatalog productCatalog = new ProductCatalog();

            productCatalog.AddProduct('A', 30);
            var price = productCatalog.GetPrice('B');

            Assert.AreEqual(price, 0);
        }
コード例 #19
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));
        }
コード例 #20
0
        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));
        }
コード例 #21
0
        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);
        }
コード例 #22
0
        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);
        }
コード例 #23
0
        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"));
        }
コード例 #24
0
        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"));
        }
コード例 #25
0
        public IActionResult OnPost()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            catalog.AddProduct(Product);

            return(RedirectToPage("GetAllProducts"));
        }
コード例 #26
0
        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"));
        }
コード例 #27
0
        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);
        }
コード例 #28
0
        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);
        }
コード例 #29
0
        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(""));
        }
コード例 #30
0
        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"));
        }
コード例 #31
0
    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());
        }
    }
コード例 #32
0
        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"));
        }
コード例 #33
0
        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);
        }
コード例 #34
0
        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"));
        }
コード例 #35
0
        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"));
        }
コード例 #36
0
        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(""));
        }