public async Task CannotWireTransferIfNotEnoughFunds( decimal deposit, decimal transfer) { var accCreatedEv = new AccountCreated(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Name = "Jake Sanders" }; var cashDepositedEv = new CashDeposited(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = deposit }; var cmd = new TryWireTransfer() { AccountId = _accountId, Amount = transfer }; await _runner.Run( def => def .Given(accCreatedEv, cashDepositedEv) .When(cmd) .Throws(new SystemException("The account does not have enough funds for requested wire transfer."))); }
public async Task CannotWithdrawFundsIfTransferIsNotPositive(decimal transfer) { var deposit = 5000m; var limit = 5000m; var accCreatedEv = new AccountCreated(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Name = "Jake Sanders" }; var cashDepositedEv = new CashDeposited(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = deposit }; var limitSetEv = new DailyWireTransferLimitSet(CorrelatedMessage.NewRoot()) { AccountId = _accountId, DailyLimit = limit }; var cmd = new TryWireTransfer() { AccountId = _accountId, Amount = transfer }; await _runner.Run( def => def .Given(accCreatedEv, cashDepositedEv, limitSetEv) .When(cmd) .Throws(new SystemException("Wire Transfer amount should be greater than 0."))); }
public async Task CannotWireTransferMultipleTimesIfLimitExceeded( decimal deposit, decimal limit, decimal transfer) { var accCreatedEv = new AccountCreated(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Name = "Jake Sanders" }; var cashDepositedEv = new CashDeposited(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = deposit }; var dailyLimitSetEv = new DailyWireTransferLimitSet(CorrelatedMessage.NewRoot()) { AccountId = _accountId, DailyLimit = limit }; var transferedEv = new WireTransferHappened(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = transfer }; var cmd = new TryWireTransfer() { AccountId = _accountId, Amount = transfer }; var transferFailedEv = new WireTransferFailed(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = transfer }; var accBlockedEv = new AccountBlocked(CorrelatedMessage.NewRoot()) { AccountId = _accountId }; await _runner.Run( def => def .Given(accCreatedEv, cashDepositedEv, dailyLimitSetEv, transferedEv, transferedEv) .When(cmd) .Then(transferFailedEv, accBlockedEv)); }
public async Task CannotWireTransferIfAccountDoesNotExist() { var transfer = 500m; var cmd = new TryWireTransfer() { AccountId = _accountId, Amount = transfer }; await _runner.Run( def => def .Given() .When(cmd) .Throws(new SystemException("The wire transfer cannot be done on the inexistent account."))); }
public async Task CannotWireTransferIfAccountIsBlocked() { var deposit = 5000m; var transfer = 100m; var accCreatedEv = new AccountCreated(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Name = "Jake Sanders" }; var cashDepositedEv = new CashDeposited(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = deposit }; var accBlocked = new AccountBlocked(CorrelatedMessage.NewRoot()) { AccountId = _accountId }; var cmd = new TryWireTransfer() { AccountId = _accountId, Amount = transfer }; var transferFailedEv = new WireTransferFailed(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = cmd.Amount }; await _runner.Run( def => def .Given(accCreatedEv, cashDepositedEv, accBlocked) .When(cmd) .Then(transferFailedEv)); }
public async Task CanWireTransferIfEnoughFundsAndNotExceededLimits( decimal deposit, decimal limit, decimal transfer) { var accCreatedEv = new AccountCreated(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Name = "Jake Sanders" }; var cashDepositedEv = new CashDeposited(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = deposit }; var dailyLimitSetEv = new DailyWireTransferLimitSet(CorrelatedMessage.NewRoot()) { AccountId = _accountId, DailyLimit = limit }; var cmd = new TryWireTransfer() { AccountId = _accountId, Amount = transfer }; var transferedEv = new WireTransferHappened(CorrelatedMessage.NewRoot()) { AccountId = _accountId, Amount = cmd.Amount }; await _runner.Run( def => def .Given(accCreatedEv, cashDepositedEv, dailyLimitSetEv) .When(cmd) .Then(transferedEv)); }