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 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 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 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 TestIfNoPromoGetPromoRulesReturnsEmptyList( ) { var ruleFile = TestAssistant.GetPromoRuleFileNameFromAppConfig( ); File.AppendAllText(ruleFile, string.Empty); var ruleFactory = new ComaSeparatedFileSpecialPricingRuleFactory(ruleFile); var rules = ruleFactory.GetPromoRules( ); Assert.IsNotNull(rules); Assert.IsTrue(0 == rules.Count( )); }
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 TestReadFileReturnsAllLineRead( ) { var goodFileName = TestAssistant.GetFileNameFromAppConfig(GOODFILENAMEKEY); File.AppendAllText(goodFileName, TEXTTOWRITE); var linesRead = FileReader.ReadFile(goodFileName); File.Delete(goodFileName); Assert.IsNotNull(linesRead); Assert.AreEqual(1, linesRead.Length); Assert.IsTrue(linesRead[0].Equals(TEXTTOWRITE)); }
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); }
public void TestGetPromoRulesReturnsListOfInitialisedRules( ) { var ruleFile = TestAssistant.GetPromoRuleFileNameFromAppConfig( ); var allLines = new List <string>( ) { PROMORULEHEADER, RULEONE, RULETWO }; File.AppendAllLines(ruleFile, allLines); var ruleFactory = new ComaSeparatedFileSpecialPricingRuleFactory(ruleFile); var rules = ruleFactory.GetPromoRules( ); File.Delete(ruleFile); Assert.IsNotNull(rules); Assert.IsTrue(2 == rules.Count( )); // We should expected 2 rules excluding the header }
/// <summary> /// Get rules /// </summary> /// <returns></returns> public static List <CheckoutKata.Business.ISpecialPricingRule> CreateRulesFromTexFile( ) { var ruleFile = TestAssistant.GetPromoRuleFileNameFromAppConfig( ); var allLines = new List <string>( ) { PROMORULEHEADER, RULEONE, RULETWO }; // Write the promotion rules to the file File.AppendAllLines(ruleFile, allLines); var ruleFactory = new ComaSeparatedFileSpecialPricingRuleFactory(ruleFile); File.Delete(ruleFile); // Any test calling this will fail if the an exception is thrown whist tring to get the List of promo rules. // Its ok, as it is a test. It will force the engineer to debug why their test is failing return(ruleFactory.GetPromoRules( ).ToList( )); }
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); }