public void Run(string[] args)
        {
            var ba         = new BankAccount();
            var cmdDeposit = new BankAccountCommand(ba,
                                                    BankAccountCommand.Action.Deposit, 100);
            var cmdWithdraw = new BankAccountCommand(ba,
                                                     BankAccountCommand.Action.Withdraw, 1000);

            cmdDeposit.Call();
            cmdWithdraw.Call();
            Console.WriteLine(ba);
            cmdWithdraw.Undo();
            cmdDeposit.Undo();
            Console.WriteLine(ba);


            var from = new BankAccount();

            from.Deposit(100);
            var to = new BankAccount();

            var mtc = new MoneyTransferCommand(from, to, 1000);

            mtc.Call();


            // Deposited $100, balance is now 100
            // balance: 100
            // balance: 0

            Console.WriteLine(from);
            Console.WriteLine(to);
        }
        public void BankAccountCommand_Withdraw()
        {
            var cashToWithdraw      = 100;
            var account             = new BankAccount();
            var bankCommand         = new BankAccountCommand(account, TransactionType.WITHDRAW, cashToWithdraw);
            var expectedBankBalance = account.Amount - cashToWithdraw;

            bankCommand.Execute();

            Assert.Equal(expectedBankBalance, account.Amount);
        }
        public void BankAccountCommand_Deposit()
        {
            var cashToDeposit       = 100;
            var account             = new BankAccount();
            var bankCommand         = new BankAccountCommand(account, TransactionType.DEPOSIT, cashToDeposit);
            var expectedBankBalance = account.Amount + cashToDeposit;

            bankCommand.Execute();

            Assert.Equal(expectedBankBalance, account.Amount);
        }
        public void BankAccountCommand_Undo(TransactionType transactionType)
        {
            var cashToWithdraw      = 100;
            var account             = new BankAccount();
            var bankCommand         = new BankAccountCommand(account, transactionType, cashToWithdraw);
            var expectedBankBalance = account.Amount;

            bankCommand.Execute();
            bankCommand.Undo();

            Assert.Equal(expectedBankBalance, account.Amount);
        }
Example #5
0
        public void WithdrawMoneyOnYourBankAccount(string id, double amount)
        {
            if (IsItYourAccount(id))
            {
                throw new YourBankAccountException();
            }
            var account = FindAccount(id);
            var command = new BankAccountCommand(account, BankAccountCommand.Action.Withdraw, amount);

            account.UpdateAccountHistory(command);
            command.Call();
        }
        public void BankAccountCommand_Withdraw_Once_Undo_Twice()
        {
            var cashToDeposit       = 100;
            var account             = new BankAccount();
            var bankCommand         = new BankAccountCommand(account, TransactionType.WITHDRAW, cashToDeposit);
            var expectedBankBalance = account.Amount;

            bankCommand.Execute();
            bankCommand.Undo();
            bankCommand.Undo();

            Assert.Equal(expectedBankBalance, account.Amount);
        }
Example #7
0
        public void TestCompositeCommand()
        {
            var ba        = new BankAccount();
            var deposit   = new BankAccountCommand(ba, BankAccountCommand.Action.Deposit, 100);
            var withdraw  = new BankAccountCommand(ba, BankAccountCommand.Action.WithDraw, 50);
            var composite = new CompositeBankAccountCommand(new[] { deposit, withdraw });

            composite.Call();
            Console.WriteLine(ba);

            composite.Undo();
            Console.WriteLine(ba);
        }
        public void BankAccountCommand_Undo_Many_Transactions()
        {
            var cashToDeposit       = 100;
            var cashToWithdraw      = 50;
            var account             = new BankAccount();
            var depositCommand      = new BankAccountCommand(account, TransactionType.DEPOSIT, cashToDeposit);
            var withdrawCommand     = new BankAccountCommand(account, TransactionType.WITHDRAW, cashToWithdraw);
            var expectedBankBalance = account.Amount;

            depositCommand.Execute();
            withdrawCommand.Execute();
            depositCommand.Undo();
            withdrawCommand.Undo();

            Assert.Equal(expectedBankBalance, account.Amount);
        }
Example #9
0
        public override void Call()
        {
            BankAccountCommand last = null;

            foreach (var cmd in this)
            {
                if (last == null || last.Success)
                {
                    cmd.Call();
                    last = cmd;
                }
                else
                {
                    cmd.Undo();
                    break;
                }
            }
        }
        public override void Call()
        {
            BankAccountCommand last = null;

            foreach (var cmd in this)
            {
                if (last == null || last.Success)
                {
                    cmd.Call();
                    last = cmd;
                }
                else
                {
                    cmd.Undo();
                    break; // We dont perform any additional commands
                }
            }
        }