public void TransferMoney_Should_ThrowMoneyNotEnoughException_When_TotalBalanceIsLessThanAmoutToTransfer() { var sender = "NL95INGB1938035321"; var payee = "NL13ABNA7035378898"; var dto = new TransferMoneyDto { payee_iban_number = payee, sender_iban_number = sender, amount = 2000 }; Account senderInstance = new Account(); Account payeeInstance = new Account(); MockAccountRepository.Setup(x => x.GetByIBanNumber(sender)).Returns(Task.FromResult(senderInstance)); MockAccountRepository.Setup(x => x.GetByIBanNumber(payee)).Returns(Task.FromResult(payeeInstance)); IEnumerable <Statement> statements = new List <Statement> { new Statement { Amount = 100 }, new Statement { Amount = 1000 } }; MockStatementRepository.Setup(x => x.GetByAccountId(It.IsAny <int>())).Returns(Task.FromResult(statements)); Assert.ThrowsAsync <MoneyNotEnoughException>(() => _testService.TransferMoney(dto)); }
public void TransferMoney_Should_ThrowValidationException_When_PayeeIbanNumberIsInvalid() { var dto = new TransferMoneyDto { payee_iban_number = "thank you", sender_iban_number = "NL13ABNA7035378898", amount = -1 }; Assert.ThrowsAsync <ValidationException>(() => _testService.TransferMoney(dto)); }
public void TransferMoney_Should_ThrowValidationException_When_AmountIsLessThanZero() { var dto = new TransferMoneyDto { payee_iban_number = "NL13ABNA7035378898", sender_iban_number = "NL95INGB1938035321", amount = -1 }; Assert.ThrowsAsync <ValidationException>(() => _testService.TransferMoney(dto)); }
public IActionResult TransferWallet([FromBody] TransferMoneyDto transferMoneyDto) { if (transferMoneyDto.Amount <= 0) { return(BadRequest()); } var fromUserWallet = _userWalletRepository.GetUserWalletById(transferMoneyDto.FromUserWalletId); if (fromUserWallet == null) { return(NotFound()); } var toUserWallet = _userWalletRepository.GetUserWalletById(transferMoneyDto.ToUserWalletId); if (toUserWallet == null) { return(NotFound()); } if (fromUserWallet.WalletId == toUserWallet.WalletId) { fromUserWallet.Balance -= transferMoneyDto.Amount; toUserWallet.Balance += transferMoneyDto.Amount; } else { fromUserWallet.Balance -= transferMoneyDto.Amount; toUserWallet.Balance += _euroRateProvider .ConvertMoney(fromUserWallet.Wallet.CurrencyCode, toUserWallet.Wallet.CurrencyCode, transferMoneyDto.Amount);; } if (!TryValidateModel(fromUserWallet)) { return(BadRequest()); } _userWalletRepository.SaveChanges(); return(CreatedAtRoute("GetUserWallets", new { userId = fromUserWallet.UserId }, transferMoneyDto)); }
public void TransferMoney_Should_ThrowAccountNotFoundExceptionn_When_PayeeAccountWasNotFound() { var sender = "NL95INGB1938035321"; var payee = "NL13ABNA7035378898"; var dto = new TransferMoneyDto { payee_iban_number = payee, sender_iban_number = sender, amount = 2000 }; Account senderInstance = new Account(); Account payeeInstance = null; MockAccountRepository.Setup(x => x.GetByIBanNumber(sender)).Returns(Task.FromResult(senderInstance)); MockAccountRepository.Setup(x => x.GetByIBanNumber(payee)).Returns(Task.FromResult(payeeInstance)); Assert.ThrowsAsync <AccountNotFoundException>(() => _testService.TransferMoney(dto)); }
public void TransferMoney_Should_Success_When_AmountIsLessThanTotalBalance() { var sender = "NL95INGB1938035321"; var payee = "NL13ABNA7035378898"; var dto = new TransferMoneyDto { payee_iban_number = payee, sender_iban_number = sender, amount = 2000 }; Account senderInstance = new Account(); Account payeeInstance = new Account(); MockAccountRepository.Setup(x => x.GetByIBanNumber(sender)).Returns(Task.FromResult(senderInstance)); MockAccountRepository.Setup(x => x.GetByIBanNumber(payee)).Returns(Task.FromResult(payeeInstance)); IEnumerable <Statement> statements = new List <Statement> { new Statement { Amount = 100 }, new Statement { Amount = 1000 }, new Statement { Amount = 10000 } }; MockStatementRepository.Setup(x => x.GetByAccountId(It.IsAny <int>())).Returns(Task.FromResult(statements)); TransferMoneyResultDto resultDto = new TransferMoneyResultDto { success = true }; MockTransactionRepository.Setup(x => x.SaveTransferringMoney(It.IsAny <TransferMoneyFullDto>())).Returns(Task.FromResult(resultDto)); var result = _testService.TransferMoney(dto).Result; Assert.IsTrue(result.success); }
public async Task <TransferMoneyResultDto> TransferMoney(TransferMoneyDto dto) { ValidationHelper.Validate(_transferMoneyValidator, dto); Account sender = await _accountRepository.GetByIBanNumber(dto.sender_iban_number); if (sender == null) { throw new AccountNotFoundException("sender was not found"); } Account payee = await _accountRepository.GetByIBanNumber(dto.payee_iban_number); if (payee == null) { throw new AccountNotFoundException("payee was not found"); } var statements = await _statementRepository.GetByAccountId(sender.Id); var totalBalance = statements.Sum(x => StatementHelper.CalculateActualAmount(x.Amount, x.Fee)); if (totalBalance < dto.amount) { throw new MoneyNotEnoughException("not enough money to transfer"); } TransferMoneyFullDto fullDto = new TransferMoneyFullDto { amount = dto.amount, sender = sender, payee = payee, transfer_date = DateTime.Now, transfer_fee = _appSettings.TransferFee }; var dtoResult = await _transactionRepository.SaveTransferringMoney(fullDto); return(dtoResult); }
public async Task <ActionResult <TransferMoneyResultDto> > Post(TransferMoneyDto dto) { var viewDto = await _transactionService.TransferMoney(dto); return(Ok(viewDto)); }
public async Task TransferMoney([FromBody] TransferMoneyDto request) { var command = new TransferMoneyCommand(request.SourceAccountNumber, request.DestinationAccountNumber, request.Amount); await this.AccountCommands.TransferMoneyAsync(command); }