public async void TransferFundNormally() { var transferFundDetails = new TransferFundDto() { DestinationAccountNumber = "0000000002", Amount = 5, }; var transferFundRequest = await _userAccountService.TransferFundToOtherUser(1, transferFundDetails); Assert.True(transferFundRequest.IsSuccess); }
public async Task <IActionResult> TransferFund([FromBody] TransferFundDto transferDetails) { var currentUserId = Convert.ToInt32(AES.Decrypt(User.FindFirst("LoggedInUserId").Value)); var processTransfer = await _userAccountService.TransferFundToOtherUser(currentUserId, transferDetails); if (!processTransfer.IsSuccess) { return(BadRequest(processTransfer.Message)); } return(Ok("Successfull Fund Transfer")); }
public async void SenderBalanceIsGreaterThanAmountToBeSent() { var transferFundDetails = new TransferFundDto() { DestinationAccountNumber = "0000000002", Amount = 99999, }; var transferFundRequest = await _userAccountService.TransferFundToOtherUser(1, transferFundDetails); Assert.False(transferFundRequest.IsSuccess); }
public async void SenderNotFound() { var transferFundDetails = new TransferFundDto() { DestinationAccountNumber = "0000000002", Amount = 99999, }; var transferFundRequest = await _userAccountService.TransferFundToOtherUser(0, transferFundDetails); Assert.False(transferFundRequest.IsSuccess); }
public async void AmountIsZeroOrNegative() { var transferFundDetails = new TransferFundDto() { DestinationAccountNumber = "0000000002", Amount = 0, }; var transferFundRequest = await _userAccountService.TransferFundToOtherUser(1, transferFundDetails); Assert.False(transferFundRequest.IsSuccess); }
public async void DestinationAccountEmpty() { var transferFundDetails = new TransferFundDto() { DestinationAccountNumber = string.Empty, Amount = 200, }; var transferFundRequest = await _userAccountService.TransferFundToOtherUser(1, transferFundDetails); Assert.False(transferFundRequest.IsSuccess); }
public async Task <TransactionResultDto> TransferFundToOtherUser(int userId, TransferFundDto transferDetail) { if (string.IsNullOrEmpty(transferDetail.DestinationAccountNumber)) { return(new TransactionResultDto("Destination Account Number is Empty")); } if (transferDetail.Amount <= 0) { return(new TransactionResultDto("Amount should be greater than 0")); } var sender = await _context.UserAccounts.FindAsync(userId); if (sender == null) { return(new TransactionResultDto("Sender Not Found!")); } if (transferDetail.Amount > sender.Balance) { return(new TransactionResultDto("Amount to transfer is greater than existing Balance!")); } var senderCurrentBalance = sender.Balance; var recipient = await _context.UserAccounts.FirstOrDefaultAsync(x => x.AccountNumber == transferDetail.DestinationAccountNumber); if (recipient == null) { return(new TransactionResultDto("Destination Account Number Not Found")); } var reciepientCurrentBalance = recipient.Balance; sender.Balance = senderCurrentBalance - transferDetail.Amount; recipient.Balance = reciepientCurrentBalance + transferDetail.Amount; var senderTransaction = new Transaction() { TransactionType = TransactionType.TRANSFER.ToString(), RecipientAccountNumber = transferDetail.DestinationAccountNumber, AmountTransferred = transferDetail.Amount, SenderAccountNumber = sender.AccountNumber, BeforeBalance = senderCurrentBalance, AfterBalance = senderCurrentBalance - transferDetail.Amount, UserAccountId = userId }; var receiptiendTransaction = new Transaction() { TransactionType = TransactionType.TRANSFER.ToString(), SenderAccountNumber = sender.AccountNumber, RecipientAccountNumber = recipient.AccountNumber, AmountTransferred = transferDetail.Amount, BeforeBalance = reciepientCurrentBalance, AfterBalance = reciepientCurrentBalance + transferDetail.Amount, UserAccountId = recipient.Id }; _context.Add(senderTransaction); _context.Add(receiptiendTransaction); if (await _context.SaveChangesAsync() == 0) { return(new TransactionResultDto("No Transfer Happened")); } return(new TransactionResultDto()); }