public async void ShouldNot_EvaluateTransactionAsync_Invalid()
        {
            var transactionCheckCommand = new TransactionCreatedEvent();

            transactionCheckCommand.SetPending();
            var transactionIsCheckedEvent = await _manager
                                            .EvaluateTransactionAsync(transactionCheckCommand);

            Assert.Null(transactionIsCheckedEvent);
        }
Example #2
0
        public async void ShouldNot_ProcessTransactionUpdatedEventAsync_Declined()
        {
            var newTransaction = new TransactionCreatedEvent
            {
                Id               = 1.ToGuid().ToString(),
                AccountId        = 2.ToGuid().ToString(),
                Amount           = 1,
                SequentialNumber = 3
            };

            newTransaction.SetDenial();
            var newCreatedAccount = await _manager.ProcessTransactionUpdatedEventAsync(newTransaction);

            Assert.Null(newCreatedAccount);
        }
Example #3
0
        public async void Should_ProcessTransactionUpdatedEventAsync_Valid()
        {
            var newTransaction = new TransactionCreatedEvent
            {
                Id               = 1.ToGuid().ToString(),
                AccountId        = 1.ToGuid().ToString(),
                Amount           = 1,
                SequentialNumber = 2
            };

            newTransaction.SetApproval();
            var newCreatedAccount = await _manager.ProcessTransactionUpdatedEventAsync(newTransaction);

            Assert.NotNull(newCreatedAccount);
            Assert.Equal(2, newCreatedAccount.Balance);
        }
        public async Task <CreateTransactionCommandResult> Handle(CreateTransactionCommand command)
        {
            var charge         = new Money(command.Amount, command.CurrencyCode);
            var newTransaction = Transaction.CreateTransactionForCard(command.CardId, command.UniqueId, command.ChargeDate, charge);

            var success = await transactionRepository.Add(newTransaction);

            if (success)
            {
                var transactionCreatedEvent = new TransactionCreatedEvent(newTransaction);

                eventBus.Publish(transactionCreatedEvent);
            }

            return(new CreateTransactionCommandResult(
                       newTransaction.Id,
                       newTransaction.CardId,
                       newTransaction.ChargeDate,
                       newTransaction.UniqueId,
                       newTransaction.Charge.Amount,
                       newTransaction.Charge.CurrencyCode,
                       success));
        }