Example #1
0
        public void ShouldNotProvdeAnySpecialPrice_WhenItemIsNotOnSale()
        {
            Dictionary <string, int> saleRules    = new Dictionary <string, int>();
            PricingRules             pricingRules = new PricingRules(saleRules);

            pricingRules.LookupPrice("A", 1).Equals(null);
        }
Example #2
0
        public void ScanMultipleTest()
        {
            PricingRules pricingRules = new PricingRules();
            CheckOut     checkOut     = new CheckOut(pricingRules);

            checkOut.ScanMultiple("A,B,C,D,A,D");
            Assert.AreEqual(180, checkOut.Total());
        }
Example #3
0
        public void ScanMultipleIncorrectItem()
        {
            PricingRules pricingRules = new PricingRules();
            CheckOut     checkOut     = new CheckOut(pricingRules);

            checkOut.ScanMultiple("A,1,C,D,A,D");
            checkOut.Total();
        }
Example #4
0
        private PricingRules GetTestPricingRulesWithMissingSinglePrice()
        {
            var _pricingRulesComplex = new PricingRules();

            _pricingRulesComplex.Add("A", 3, 130);
            _pricingRulesComplex.Add("A", 10, 300);
            return(_pricingRulesComplex);
        }
Example #5
0
        public void ShouldProvideSpecialPrice_WhenItemIsOnSale_AndNumberOfUnitsMatchSpecialPriceRule(string sku, int units, int specialPrice)
        {
            Dictionary <string, int> saleRules = new Dictionary <string, int>();

            saleRules.Add(String.Format("{0}:{1}", sku, units), specialPrice);
            PricingRules pricingRules = new PricingRules(saleRules);

            pricingRules.LookupPrice(sku, units).Equals(specialPrice);
        }
Example #6
0
        public void ShouldNotProvideSpecialPrice_WhenItemIsOnSale_AndNumberOfUnitsDoNotMatchSpecialPriceRule()
        {
            Dictionary <string, int> saleRules = new Dictionary <string, int>();

            saleRules.Add("A:3", 130);
            PricingRules pricingRules = new PricingRules(saleRules);

            pricingRules.LookupPrice("A", 1).Equals(null);
        }
Example #7
0
        private PricingRules GetTestPricingRulesWithMultipleSpecialBuys()
        {
            var _pricingRulesComplex = new PricingRules();

            _pricingRulesComplex.Add("A", 1, 50);
            _pricingRulesComplex.Add("A", 3, 130);
            _pricingRulesComplex.Add("A", 10, 300);
            return(_pricingRulesComplex);
        }
Example #8
0
 public CheckoutTests()
 {
     _pricingRules = new PricingRules();
     _pricingRules.Add("A", 1, 50);
     _pricingRules.Add("A", 3, 130);
     _pricingRules.Add("B", 1, 30);
     _pricingRules.Add("B", 2, 45);
     _pricingRules.Add("C", 1, 20);
     _pricingRules.Add("D", 1, 15);
 }
Example #9
0
        public void ScanTest()
        {
            PricingRules pricingRules = new PricingRules();
            CheckOut     checkOut     = new CheckOut(pricingRules);

            checkOut.Scan("A");
            checkOut.Scan("A");
            checkOut.Scan("B");
            checkOut.Scan("B");
            Assert.AreEqual(145, checkOut.Total());
        }
Example #10
0
        public void ShouldCalculateTotals_WhenSimilarItemsAreScanned()
        {
            Dictionary <string, int> saleRules    = new Dictionary <string, int>();
            PricingRules             pricingRules = new PricingRules(saleRules);
            Basket basket = new Basket(pricingRules);
            Item   itemA  = new Item {
                Sku = "A", Price = 50
            };

            basket.Scan(itemA);
            basket.Scan(itemA);
            basket.Scan(itemA);
            basket.GetTotal().Equals(150);
        }
Example #11
0
        public void CanCalculateBasketWhereItemsDontHaveEnoughToHitRules()
        {
            Item item1 = new Item {
                id    = 1,
                name  = "A",
                price = 50
            };
            PricingRules rules = new PricingRules {
                quantity = 3,
                price    = 120
            };

            item1.rules = rules;


            Item item2 = new Item {
                id    = 2,
                name  = "B",
                price = 30
            };
            PricingRules rules2 = new PricingRules {
                quantity = 2,
                price    = 45
            };

            item2.rules = rules2;


            Item item3 = new Item {
                id    = 3,
                name  = "C",
                price = 20
            };


            helper.AddItemToBasket(item1);
            helper.AddItemToBasket(item1);

            helper.AddItemToBasket(item2);

            helper.AddItemToBasket(item3);
            helper.AddItemToBasket(item3);
            helper.AddItemToBasket(item3);

            int basketPrice = helper.CheckoutBasket();

            Assert.Equal(190, basketPrice);
        }
Example #12
0
        public void CanCalculateBasketPriceAllRulesButDiffMultiplesOfItems()
        {
            Item item1 = new Item {
                id    = 1,
                name  = "A",
                price = 50
            };
            PricingRules rules = new PricingRules {
                quantity = 3,
                price    = 120
            };

            item1.rules = rules;


            Item item2 = new Item {
                id    = 2,
                name  = "B",
                price = 30
            };
            PricingRules rules2 = new PricingRules {
                quantity = 2,
                price    = 45
            };

            item2.rules = rules2;


            Item item3 = new Item {
                id    = 3,
                name  = "C",
                price = 20
            };

            helper.AddItemToBasket(item1);
            helper.AddItemToBasket(item1);
            helper.AddItemToBasket(item1);
            helper.AddItemToBasket(item1);

            helper.AddItemToBasket(item2);
            helper.AddItemToBasket(item2);

            helper.AddItemToBasket(item3);

            int basketPrice = helper.CheckoutBasket();

            Assert.Equal(235, basketPrice);
        }
Example #13
0
        public void ShouldCalculateTotals_WhenDifferentItemsNotOnSaleAreScanned()
        {
            Dictionary <string, int> saleRules    = new Dictionary <string, int>();
            PricingRules             pricingRules = new PricingRules(saleRules);
            Basket basket = new Basket(pricingRules);
            Item   itemA  = new Item {
                Sku = "A", Price = 50
            };
            Item itemB = new Item {
                Sku = "B", Price = 30
            };

            basket.Scan(itemA);
            basket.Scan(itemB);
            basket.Scan(itemA);
            basket.GetTotal().Equals(130);
        }
Example #14
0
        public void NewPricingListTest()
        {
            PricingRules pricingRules = new PricingRules();

            pricingRules.pricingList = new Dictionary <string, Rule>();

            pricingRules.pricingList.Add("E", new Rule("E", 25, 2, 46));
            pricingRules.pricingList.Add("F", new Rule("F", 50, 3, 140));
            pricingRules.pricingList.Add("G", new Rule("G", 10, 0, 0));
            CheckOut checkOut = new CheckOut(pricingRules);

            checkOut.Scan("E");
            checkOut.Scan("F");
            checkOut.Scan("F");
            checkOut.Scan("F");
            checkOut.Scan("G");

            Assert.AreEqual(175, checkOut.Total());
        }
Example #15
0
        public void TestPricingRulesApplysSpecialPriceCorrectly()
        {
            var pricingRules = new PricingRules();

            pricingRules.Add("A", 1, 50);
            pricingRules.Add("A", 3, 130);
            pricingRules.Add("B", 1, 30);
            pricingRules.Add("B", 2, 45);
            pricingRules.Add("C", 1, 20);
            pricingRules.Add("D", 1, 15);

            // 10 item A's, 9 will have offer applied
            var expectedPrice = MultibuyCostOfItem3A * 3 + UnitCostOfItemA;

            Assert.Equal(expectedPrice, pricingRules.GetPrice("A", 10));

            // 5 item B's, 4 will have offer applied
            var expectedPrice2 = MultibuyCostOfItem2B * 2 + UnitCostOfItemB;

            Assert.Equal(expectedPrice2, pricingRules.GetPrice("B", 5));
        }
Example #16
0
        public void TestPricingRulesReturnsCorrectCost()
        {
            var pricingRules = new PricingRules();

            pricingRules.Add("A", 1, 50);
            pricingRules.Add("A", 3, 130);
            pricingRules.Add("B", 1, 30);
            pricingRules.Add("B", 2, 45);
            pricingRules.Add("C", 1, 20);
            pricingRules.Add("D", 1, 15);

            // single item
            Assert.Equal(UnitCostOfItemA, pricingRules.GetPrice("A", 1));
            Assert.Equal(UnitCostOfItemB, pricingRules.GetPrice("B", 1));
            Assert.Equal(UnitCostOfItemC, pricingRules.GetPrice("C", 1));
            Assert.Equal(UnitCostOfItemD, pricingRules.GetPrice("D", 1));

            //multibuy
            Assert.Equal(MultibuyCostOfItem3A, pricingRules.GetPrice("A", 3));
            Assert.Equal(MultibuyCostOfItem2B, pricingRules.GetPrice("B", 2));
        }
Example #17
0
        public void CanCalculateBasketPriceWithSameItemsAndRules()
        {
            Item item1 = new Item {
                id    = 1,
                name  = "A",
                price = 50
            };
            PricingRules rules = new PricingRules {
                quantity = 3,
                price    = 120
            };

            item1.rules = rules;


            helper.AddItemToBasket(item1);
            helper.AddItemToBasket(item1);
            helper.AddItemToBasket(item1);

            int basketPrice = helper.CheckoutBasket();

            Assert.Equal(120, basketPrice);
        }
Example #18
0
 public Basket(PricingRules pricingRules)
 {
     _pricingRules = pricingRules;
 }
Example #19
0
 public Checkout(PricingRules pricingRules)
 {
     _pricingRules = pricingRules;
 }