예제 #1
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);
        }
예제 #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);
        }
        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);
        }