public void BankAccount_transfer_changes_balances()
        {
            _bankAccount.Deposit(10);
            var destinationAccount = new BankAccount();

            _bankAccount.TransferTo(destinationAccount,7);

            _bankAccount.Balance.Should().Be(3);
            destinationAccount.Balance.Should().Be(7);
        }
        public void BankAccount_transfer_throws_when_exceeds_balance()
        {
            _bankAccount.Deposit(10);
            var destinationAccount = new BankAccount();

            var exception = Record.Exception(() => _bankAccount.TransferTo(destinationAccount, 11));

            exception.Should().BeOfType<InvalidOperationException>();
            exception.Message.Should().Be("Insufficient funds. Current balace: 10, attempted withdrawal: 11.");
        }
        public void BankAccount_failed_transfer_keeps_balances_of_both_involved_accounts_intact()
        {
            _bankAccount.Deposit(10);
            var destinationAccount = new BankAccount();

            Record.Exception(() => _bankAccount.TransferTo(destinationAccount, 11));

            _bankAccount.Balance.Should().Be(10);
            destinationAccount.Balance.Should().Be(decimal.Zero);
        }
 public void TransferTo(BankAccount destinationAccount, decimal amount)
 {
     Withdraw(amount);
     destinationAccount.Deposit(amount);
 }