public async Task Create_DepositNonExistingAccount_ShouldReturnNotFound()
        {
            var request = new DepositCreateRequest
            {
                AccountId  = 1,
                Ammount    = 100,
                CustomerId = 2,
                Details    = "Test"
            };

            _mockMediator
            .Setup(m => m.Send(It.Is <DepositCreateRequest>(d => d.AccountId == request.AccountId &&
                                                            d.Ammount == request.Ammount &&
                                                            d.CustomerId == request.CustomerId &&
                                                            d.Details == request.Details), default))
            .ThrowsAsync(new NotFoundException())
            .Verifiable();

            var controller = new DepositController(_mockMediator.Object);

            var result = await controller.Create(request);

            _mockMediator.Verify();

            Assert.True(typeof(NotFoundObjectResult) == result.Result.GetType());
        }
        public async Task Create_DepositExistingAccount_ShouldReturnTransactions()
        {
            var request = new DepositCreateRequest
            {
                AccountId  = 1,
                Ammount    = 100,
                CustomerId = 2,
                Details    = "Test"
            };

            var depositTransactions = DepositTransactions(request);

            _mockMediator
            .Setup(m => m.Send(It.Is <DepositCreateRequest>(d => d.AccountId == request.AccountId &&
                                                            d.Ammount == request.Ammount &&
                                                            d.CustomerId == request.CustomerId &&
                                                            d.Details == request.Details), default))
            .ReturnsAsync(depositTransactions)
            .Verifiable();

            var controller = new DepositController(_mockMediator.Object);

            var result = await controller.Create(request);

            _mockMediator.Verify();

            Assert.True(typeof(CreatedAtActionResult) == result.Result.GetType());
        }
Пример #3
0
        public async Task <IEnumerable <TransactionModel> > Handle(DepositCreateRequest request, CancellationToken cancellationToken)
        {
            var depositTransactionType = _repository.TransactionTypeRepository.FindSingle(tt => tt.Code == "D");

            AccountModel account = await GetAccount(request, cancellationToken);

            IEnumerable <TransactionModel> depositTransaction = await CreateDepositTransaction(request, account, depositTransactionType);

            return(depositTransaction);
        }
Пример #4
0
        public async Task <ActionResult <IEnumerable <TransactionModel> > > Create([FromBody, Required] DepositCreateRequest request)
        {
            try
            {
                var result = await _mediator.Send(request);

                return(CreatedAtAction(nameof(Create), result));
            }
            catch (BusinessException businessException)
            {
                return(Conflict(new { message = businessException.Message }));
            }
            catch (NotFoundException notFoundException)
            {
                return(NotFound(new { message = notFoundException.Message }));
            }
        }
Пример #5
0
        public async Task Handle_CreateDeposit_ShouldReturnTransaction()
        {
            var handler = new DepositCreateHandler(_mockMediator.Object, _mockRepo.Object);

            var request = new DepositCreateRequest {
                AccountId = 1, CustomerId = 1, Ammount = 100
            };
            var account     = GetTestAccount();
            var depositType = GetDepositType();

            var depositTransactions = handler.BuildDepositTransaction(request, account, depositType);

            MockDepositTransactionType();
            MockMediator(depositTransactions);

            var result = await handler.Handle(request, default);

            Assert.IsAssignableFrom <IEnumerable <TransactionModel> >(result);
            Assert.Equal(2, result.Count());
        }
Пример #6
0
        public List <TransactionModel> BuildDepositTransaction(DepositCreateRequest request, AccountModel account, TransactionType depositTransactionType)
        {
            var decimalValueToCharge = depositTransactionType.PercentCharge.Value / 100;

            var depositTransaction = new TransactionModel
            {
                AccountId         = account.Id,
                Ammount           = request.Ammount,
                Details           = request.Details,
                TransactionTypeId = depositTransactionType.Id
            };

            var depositSurcharge = new TransactionModel
            {
                AccountId         = account.Id,
                Ammount           = -(decimalValueToCharge * request.Ammount),
                Details           = $"Bank deposit surcharge of {depositTransactionType.PercentCharge}%",
                TransactionTypeId = depositTransactionType.Id
            };

            return(new List <TransactionModel> {
                depositTransaction, depositSurcharge
            });
        }
 private List <TransactionModel> DepositTransactions(DepositCreateRequest request)
 {
     return(new List <TransactionModel>
     {
         new TransactionModel
         {
             AccountId = request.AccountId.Value,
             Ammount = request.Ammount,
             Date = DateTime.Now,
             Details = request.Details,
             OperationId = 1,
             TransactionTypeId = 1
         },
         new TransactionModel
         {
             AccountId = request.AccountId.Value,
             Ammount = -(0.01 * request.Ammount),
             Date = DateTime.Now,
             Details = request.Details,
             OperationId = 1,
             TransactionTypeId = 1
         }
     });
 }
Пример #8
0
 private async Task <AccountModel> GetAccount(DepositCreateRequest request, CancellationToken cancellationToken)
 {
     return(await _mediator.Send(new AccountGetRequest { AccountId = request.AccountId.Value, CustomerId = request.CustomerId }, cancellationToken));
 }
Пример #9
0
        private async Task <IEnumerable <TransactionModel> > CreateDepositTransaction(DepositCreateRequest request, AccountModel account, TransactionType depositTransactionType)
        {
            List <TransactionModel> depositTransactions = BuildDepositTransaction(request, account, depositTransactionType);

            var transactions = await _mediator.Send(new TransactionCreateRequest
            {
                Transactions     = depositTransactions,
                OperationDetails = $"Deposit: ammount {request.Ammount} "
            });

            return(transactions);
        }