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); }