public void ShouldNotProvdeAnySpecialPrice_WhenItemIsNotOnSale() { Dictionary <string, int> saleRules = new Dictionary <string, int>(); PricingRules pricingRules = new PricingRules(saleRules); pricingRules.LookupPrice("A", 1).Equals(null); }
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()); }
public void ScanMultipleIncorrectItem() { PricingRules pricingRules = new PricingRules(); CheckOut checkOut = new CheckOut(pricingRules); checkOut.ScanMultiple("A,1,C,D,A,D"); checkOut.Total(); }
private PricingRules GetTestPricingRulesWithMissingSinglePrice() { var _pricingRulesComplex = new PricingRules(); _pricingRulesComplex.Add("A", 3, 130); _pricingRulesComplex.Add("A", 10, 300); return(_pricingRulesComplex); }
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); }
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); }
private PricingRules GetTestPricingRulesWithMultipleSpecialBuys() { var _pricingRulesComplex = new PricingRules(); _pricingRulesComplex.Add("A", 1, 50); _pricingRulesComplex.Add("A", 3, 130); _pricingRulesComplex.Add("A", 10, 300); return(_pricingRulesComplex); }
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); }
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()); }
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); }
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); }
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); }
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); }
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()); }
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)); }
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)); }
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); }
public Basket(PricingRules pricingRules) { _pricingRules = pricingRules; }
public Checkout(PricingRules pricingRules) { _pricingRules = pricingRules; }