public void TestScanItemsAreTract( ) { // Arrange var initialPrice = 50; var repo = TestAssistant.StockKeepingUnits(3, "A", initialPrice); var checkOut = new Checkout(repo, null); // Act foreach (var item in repo) { checkOut.Scan(item.Name); } //Assert Assert.IsTrue(repo.Count( ) == checkOut.NumberOfScanItems); // Arrange repo = TestAssistant.StockKeepingUnits(15, "C", initialPrice); checkOut = new Checkout(repo, null); var itemsToscan = repo.Take(5).ToList( ); // Act itemsToscan.ForEach(x => checkOut.Scan(x.Name)); //Assert Assert.IsTrue(5 == checkOut.NumberOfScanItems); }
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 TestGetTotalPriceReturnsTotalPriceOfAllScanItems( ) { var producInvent = TestAssistant.StockKeepingUnits(5, "C", 30); var checkOut = new Checkout(producInvent, new DiscountApplicator(null)); var expected = 150; foreach (var item in producInvent) { checkOut.Scan(item.Name); } var actual = checkOut.GetTotalPrice( ); 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 TestGetTotalPriceReturnsZeroIfNoItemScan( ) { var producInvent = TestAssistant.StockKeepingUnits(5, "C", 30); var checkOut = new Checkout(producInvent, null); var expected = 0; var actual = checkOut.GetTotalPrice( ); Assert.AreEqual(expected, actual); // Now scan an item that is not in the invetory checkOut.Scan("B"); actual = checkOut.GetTotalPrice( ); Assert.AreEqual(expected, actual); }
public void TestScannedItemsAreClearedWhenGetTotalPriceIsCalled( ) { // Arrange var repo = TestAssistant.StockKeepingUnits(15, "A", 30); var checkOut = new Checkout(repo, new DiscountApplicator(null)); var itemsToscan = repo.Take(3).ToList( ); // Lets scan 3 items first // Act itemsToscan.ForEach(x => checkOut.Scan(x.Name)); Assert.IsTrue(3 == checkOut.NumberOfScanItems); // now clear get the total price checkOut.GetTotalPrice( ); Assert.IsTrue(0 == checkOut.NumberOfScanItems); }