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