public void CancelOrderSuccess()
        {
            var state = new ReadyToProcessOrder(CreateReadyToAcceptCoinsState());

            state.CancelOrder();
            Assert.True(state.VendingMachine.State is ReadyToSellProduct);
        }
        public void ProcessOrderSuccess()
        {
            var state = new ReadyToProcessOrder(CreateReadyToAcceptCoinsState())
            {
                SelectedProduct = Product.Espresso,
                InsertedCoins   = new List <Coin>
                {
                    Coin.OneEuro,
                    Coin.HalfEuro
                }
            };

            var coinsToReturn = new List <CoinWithQuantity>()
            {
                new CoinWithQuantity(Coin.TwentyCent, 1),
                new CoinWithQuantity(Coin.TenCent, 1)
            };

            var oneEuroQuantityBefore    = state.Wallet.GetQuantity(Coin.OneEuro);
            var halfEuroQuantityBefore   = state.Wallet.GetQuantity(Coin.HalfEuro);
            var twentyCentQuantityBefore = state.Wallet.GetQuantity(Coin.TwentyCent);
            var tenCentQuantityBefore    = state.Wallet.GetQuantity(Coin.TenCent);


            var espressoStockBefore = state.Inventory.GetStock(Product.Espresso);

            state.ProcessOrder(coinsToReturn);

            var oneEuroQuantityAfter  = state.Wallet.GetQuantity(Coin.OneEuro);
            var halfEuroQuantityAfter = state.Wallet.GetQuantity(Coin.HalfEuro);
            var twentyQuantityAfter   = state.Wallet.GetQuantity(Coin.TwentyCent);
            var tenCentQuantityAfter  = state.Wallet.GetQuantity(Coin.TenCent);

            var espressoStockAfter = state.Inventory.GetStock(Product.Espresso);



            Assert.True(state.VendingMachine.State.InsertedCoins.Count == 0); // insertedCoins is cleared
            Assert.True(oneEuroQuantityAfter == oneEuroQuantityBefore + 1);
            Assert.True(halfEuroQuantityAfter == halfEuroQuantityBefore + 1);

            Assert.True(tenCentQuantityAfter == tenCentQuantityBefore - 1);
            Assert.True(twentyQuantityAfter == twentyCentQuantityBefore - 1);

            Assert.True(espressoStockAfter == espressoStockBefore - 1);

            Assert.True(state.VendingMachine.State is ReadyToSellProduct);
        }