Esempio n. 1
0
        public async Task Withdraw_WithCorrectRequest_ReturnSuccessTransactionsResult()
        {
            // Arrange
            var withdrawRequest = new WithdrawRequest
            {
                AccountIban = "TH123456",
                Amount      = 500,
            };

            var transactionsResult = new TransactionsResult
            {
                Success = true
            };

            transactionsService
            .WithdrawAsync(Arg.Any <WithdrawRequest>())
            .Returns(Task.FromResult(transactionsResult));

            // Act
            var actionResult = await transactionsController.Withdraw(withdrawRequest);

            var objectResult = actionResult as OkObjectResult;

            // Assert
            Assert.NotNull(objectResult);
            Assert.Equal((int)System.Net.HttpStatusCode.OK, objectResult.StatusCode);
            Assert.True((objectResult.Value as TransactionsResult).Success);
        }
Esempio n. 2
0
        public async Task Deposit_WithIncorrectRequest_ReturnFailedTransactionsResult()
        {
            // Arrange
            var depositRequest = new DepositRequest
            {
                AccountIban = "TH123456",
                Amount      = 0,
            };

            var transactionsResult = new TransactionsResult
            {
                Success = false
            };

            transactionsService
            .DepositAsync(Arg.Any <DepositRequest>())
            .Returns(Task.FromResult(transactionsResult));

            // Act
            var actionResult = await transactionsController.Deposit(depositRequest);

            var objectResult = actionResult as OkObjectResult;

            // Assert
            Assert.NotNull(objectResult);
            Assert.Equal((int)System.Net.HttpStatusCode.OK, objectResult.StatusCode);
            Assert.False((objectResult.Value as TransactionsResult).Success);
        }
Esempio n. 3
0
        public async Task Transfer_WithIncorrectRequest_ReturnSuccessTransactionsResult()
        {
            // Arrange
            var transferRequest = new TransferRequest
            {
                FromAccountIban = "AAAAA",
                ToAccountIban   = "BBBBB",
                Amount          = 1000,
            };

            var transactionsResult = new TransactionsResult
            {
                Success = false
            };

            transactionsService
            .TransferAsync(Arg.Any <TransferRequest>())
            .Returns(Task.FromResult(transactionsResult));

            // Act
            var actionResult = await transactionsController.Transfer(transferRequest);

            var objectResult = actionResult as OkObjectResult;

            // Assert
            Assert.NotNull(objectResult);
            Assert.Equal((int)System.Net.HttpStatusCode.OK, objectResult.StatusCode);
            Assert.False((objectResult.Value as TransactionsResult).Success);
        }
        public async Task <TransactionsResult> WithdrawAsync(WithdrawRequest withdrawRequest)
        {
            var transactionsResult = new TransactionsResult
            {
                AccountIban      = withdrawRequest.AccountIban,
                Amount           = withdrawRequest.Amount,
                Success          = false,
                ErrorMessage     = string.Empty,
                TransactionsType = "Withdraw",
                TransactionsDate = DateTime.UtcNow
            };

            if (withdrawRequest.Amount <= 0)
            {
                transactionsResult.ErrorMessage = "Withdraw amount is incorret";
                return(transactionsResult);
            }

            var account = await accountRepository.GetByAccountIbanAsync(withdrawRequest.AccountIban);

            if (account == null)
            {
                transactionsResult.ErrorMessage = "Account does not exists";
                return(transactionsResult);
            }

            if (account.Balance - withdrawRequest.Amount < 0)
            {
                transactionsResult.ErrorMessage = "Account balance less than withdraw amount";
                return(transactionsResult);
            }

            account.Balance -= withdrawRequest.Amount;

            await accountRepository.UpdateAccountAsync(account);

            var withdraw = new Withdraw
            {
                WithdrawId = Guid.NewGuid(),
                AccountId  = account.AccountId,
                Amount     = withdrawRequest.Amount,
                Timestamp  = DateTime.UtcNow
            };

            await withdrawRepository.AddWithdrawAsync(withdraw);

            transactionsResult.Balance = account.Balance;
            transactionsResult.Success = true;

            return(transactionsResult);
        }
        public async Task <TransactionsResult> TransferAsync(TransferRequest transferRequest)
        {
            var transactionsResult = new TransactionsResult
            {
                AccountIban      = transferRequest.FromAccountIban,
                Amount           = transferRequest.Amount,
                Success          = false,
                ErrorMessage     = string.Empty,
                TransactionsType = "Transfer",
                TransactionsDate = DateTime.UtcNow
            };

            var accountFrom = await accountRepository.GetByAccountIbanAsync(transferRequest.FromAccountIban);

            var accountTo = await accountRepository.GetByAccountIbanAsync(transferRequest.ToAccountIban);

            if (accountFrom == null || accountTo == null)
            {
                transactionsResult.ErrorMessage = "Account does not exists";
                return(transactionsResult);
            }

            if (accountFrom.Balance - transferRequest.Amount < 0)
            {
                transactionsResult.ErrorMessage = "Account balance not enough";
                return(transactionsResult);
            }

            accountFrom.Balance -= transferRequest.Amount;
            accountTo.Balance   += transferRequest.Amount;

            await accountRepository.UpdateAccountAsync(accountFrom);

            await accountRepository.UpdateAccountAsync(accountTo);

            var transfer = new Transfer
            {
                TransferId    = Guid.NewGuid(),
                FromAccountId = accountFrom.AccountId,
                ToAccountId   = accountTo.AccountId,
                Amount        = transferRequest.Amount,
                Timestamp     = DateTime.UtcNow
            };

            await transferRepository.AddTransferAsync(transfer);

            transactionsResult.Balance = accountFrom.Balance;
            transactionsResult.Success = true;

            return(transactionsResult);
        }
        public async Task <TransactionsResult> DepositAsync(DepositRequest depositRequest)
        {
            var transactionsResult = new TransactionsResult
            {
                AccountIban      = depositRequest.AccountIban,
                Amount           = depositRequest.Amount,
                Success          = false,
                ErrorMessage     = string.Empty,
                TransactionsType = "Deposit",
                TransactionsDate = DateTime.UtcNow
            };

            if (depositRequest.Amount <= 0)
            {
                transactionsResult.ErrorMessage = "Deposit amount is incorret";
                return(transactionsResult);
            }

            var account = await accountRepository.GetByAccountIbanAsync(depositRequest.AccountIban);

            if (account == null)
            {
                transactionsResult.ErrorMessage = "Account does not exists";
                return(transactionsResult);
            }

            var amount = (double)depositRequest.Amount;
            var fee    = amount * 0.1 / 100;
            var total  = amount - fee;

            account.Balance += (decimal)total;

            await accountRepository.UpdateAccountAsync(account);

            var deposit = new Deposit
            {
                DepositId = Guid.NewGuid(),
                AccountId = account.AccountId,
                Amount    = depositRequest.Amount,
                Timestamp = DateTime.UtcNow
            };

            await depositRepository.AddDepositAsync(deposit);

            transactionsResult.Balance = account.Balance;
            transactionsResult.Success = true;

            return(transactionsResult);
        }
Esempio n. 7
0
        public TransactionsResult transactionList(string sessionToken, string accountNumber)
        {
            var result = new TransactionsResult();
            var userId = _checkSessionToken(sessionToken, result);

            if (userId.HasValue)
            {
                var account = mContext.UserAccount
                              .Where(a => a.Number == accountNumber && a.UserId == userId)
                              .FirstOrDefault();

                result.Transactions = mContext.Transaction.Where(t => t.UserAccount == account.Id).ToList();
            }

            return(result);
        }
Esempio n. 8
0
        private void btnTest_Click1(object sender, RoutedEventArgs e)
        {
            JsonRpcClient         client = new JsonRpcClient();
            GetTransactionsMethod method = new GetTransactionsMethod(1, new TransactionRequest("1Nwa0TCr5umw5ZLAvKmHCl+SJDP21dyL"));

            try
            {
                TransactionsResult result = client.PostMethod <TransactionsResult>(method);

                MessageBox.Show(result.Total.ToString());
                MessageBox.Show(result.Transactions[1].Amount);
            }
            catch (JsonRpcException ex)
            {
                MessageBox.Show(ex.ErrorMessage);
            }
        }