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