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()); }
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); }
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 })); } }
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()); }
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 } }); }
private async Task <AccountModel> GetAccount(DepositCreateRequest request, CancellationToken cancellationToken) { return(await _mediator.Send(new AccountGetRequest { AccountId = request.AccountId.Value, CustomerId = request.CustomerId }, cancellationToken)); }
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); }