public void TestGetTotalPriceAppliedDiscountIrrespectiveOfScannedOrder( ) { var rules = TestAssistant.CreateRulesFromTexFile( ); var SKUAs = TestAssistant.StockKeepingUnits(4, "A", 50).ToList( ); var SKUBs = TestAssistant.StockKeepingUnits(5, "B", 30).ToList( ); var SKUCs = TestAssistant.StockKeepingUnits(1, "C", 20).ToList( ); var SKUDs = TestAssistant.StockKeepingUnits(2, "D", 15).ToList( ); // Apply discount rule to the product ApplyDiscountToProducts(SKUAs, rules[0]); ApplyDiscountToProducts(SKUBs, rules[1]); var productInvent = SKUAs.Concat(SKUBs).Concat(SKUCs).Concat(SKUDs); var checkOut = new Checkout(productInvent, new DiscountApplicator(rules)); var expected = 350; List <StockKeepingUnit> shuffledList = new List <StockKeepingUnit>(productInvent); TestAssistant.ShuffleStockKeepingUnitList(ref shuffledList); foreach (var item in shuffledList) { checkOut.Scan(item.Name); } var actual = checkOut.GetTotalPrice( ); Assert.AreEqual(expected, actual); }
public void TestGetTotalPriceAppliedDiscountToScannedProducts( ) { var rules = TestAssistant.CreateRulesFromTexFile( ); var producInvent = TestAssistant.StockKeepingUnits(2, "C", 30).ToList( ); // Apply discount rule to the product ApplyDiscountToProducts(producInvent, rules[1]); var checkOut = new Checkout(producInvent, new DiscountApplicator(rules)); var expected = 45; foreach (var item in producInvent) { checkOut.Scan(item.Name); } var actual = checkOut.GetTotalPrice( ); Assert.AreEqual(expected, actual); // Repeat test again producInvent = TestAssistant.StockKeepingUnits(8, "A", 50).ToList( ); // Apply discount rule to the product ApplyDiscountToProducts(producInvent, rules[0]); checkOut = new Checkout(producInvent, new DiscountApplicator(rules)); expected = 360; foreach (var item in producInvent) { checkOut.Scan(item.Name); } actual = checkOut.GetTotalPrice( ); Assert.AreEqual(expected, actual); }
public void TestDiscountIsAppliedIfNumberOfItemsIsThreeOrGreaterThanThree( ) { List <CheckoutKata.Business.ISpecialPricingRule> rules = TestAssistant.CreateRulesFromTexFile( ); var wh = new GenericCalculator(rules[0]); // Arrange var disCountProduct = TestAssistant.StockKeepingUnits(3, "A", 50); var expected = 130; var actual = wh.ApplyDiscount(disCountProduct); Assert.AreEqual(expected, actual); disCountProduct = TestAssistant.StockKeepingUnits(5, "A", 50); expected = 230; actual = wh.ApplyDiscount(disCountProduct); Assert.AreEqual(expected, actual); disCountProduct = TestAssistant.StockKeepingUnits(10, "A", 50); expected = 440; actual = wh.ApplyDiscount(disCountProduct); Assert.AreEqual(expected, actual); }
public void TestNoDiscountAppliedIfNumberOfItemsIsLessThanThree( ) { List <CheckoutKata.Business.ISpecialPricingRule> rules = TestAssistant.CreateRulesFromTexFile( ); var disCountProduct = TestAssistant.StockKeepingUnits(2, "A", 50); var wh = new GenericCalculator(rules[0]); var expected = 100; var actual = wh.ApplyDiscount(disCountProduct); Assert.AreEqual(expected, actual); }
public void TestApplyDiscountReturnsZeroIfNoProductIsProcided( ) { var rules = TestAssistant.CreateRulesFromTexFile( ); // Arrange List <StockKeepingUnit> disCountProduct = null; var wh = new GenericCalculator(rules[0]); var expected = 0; var actual = wh.ApplyDiscount(disCountProduct); Assert.AreEqual(expected, actual); // Now initialised with no item on the list disCountProduct = new List <StockKeepingUnit>(); actual = wh.ApplyDiscount(disCountProduct); Assert.AreEqual(expected, actual); }