Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #5
0
        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( ));
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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
        }
Пример #12
0
        /// <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( ));
        }
Пример #13
0
        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);
        }