public void If_PricingEngine_Has_No_PricingRules_Then_ItemTotalPrice_Is_0()
        {
            IPricingEngine pe = new PricingEngine();

            decimal price = pe.GetItemTotalPrice("B", 3);
            decimal expectedPrice = 0;

            Assert.AreEqual(expectedPrice, price);
        }
        public void PricingEngine_Add_Generic_PricingRules()
        {
            IPricingEngine pe = new PricingEngine();
            pe.AddPricingRule(new QuantityPricingRule("A", 50));
            pe.AddPricingRule(new QuantityPricingRule("B", 30));

            decimal price = pe.GetItemTotalPrice("B", 3);
            decimal expectedPrice = 90;

            Assert.AreEqual(expectedPrice, price);
        }
        public void PricingEngine_Instantiate_From_List()
        {
            IPricingEngine pe = new PricingEngine(
                new List<IPricingRule> {
                    new QuantityPricingRule("A", 50),
                    new QuantityPricingRule("B", 30)
                });
            decimal price = pe.GetItemTotalPrice("A", 2);
            decimal expectedPrice = 100;

            Assert.AreEqual(expectedPrice, price);
        }
        public void PricingEngine_Add_Specific_PricingRules()
        {
            IPricingEngine pe = new PricingEngine();
            pe.AddQuantityPricingRule(new QuantityPricingRule("A", 50));
            pe.AddQuantityPricingRule(new QuantityPricingRule("A", 2, 80));
            pe.AddQuantityDiscountPricingRule(new QuantityDiscountPricingRule("A", 3, 2));

            decimal price = pe.GetItemTotalPrice("A", 3);
            decimal expectedPrice = 80;

            Assert.AreEqual(expectedPrice, price);
        }