コード例 #1
0
        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.")));
        }
コード例 #2
0
        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.")));
        }
コード例 #3
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));
        }
コード例 #4
0
        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.")));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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));
        }