示例#1
0
        private async static Task <TransactionBaseResponse> TestDeposit(TransactionBaseRequest request)
        {
            var client   = new httpClientSerive();
            var response = await client.PostDeposit(request);

            Console.WriteLine("Deposit result: " + JsonConvert.SerializeObject(response));
            return(response);
        }
示例#2
0
        public void InsertTransaction(TransactionBaseRequest request, string message)
        {
            var transaction = new TransactionHistory
            {
                AccountId = request.AccountNumber,
                Amount    = request.Amount,
                Currency  = request.Currency,
                IsSuccess = true,
                Message   = message
            };

            _uow.TransactionHistoryRepo.Create(transaction);
        }
示例#3
0
        public void InsertNotExistedAccountNumber()
        {
            //Arr
            var transaction = new TransactionBaseRequest(5, 500000, "VND");

            //Act
            var result = Assert.ThrowsAsync <CustomException>(() => _transactionService.Deposit(transaction));

            //Assert
            result.ShouldBeOfType <CustomException>();
            result.AccountNumber.ShouldBe(5);
            result.ErrorCode.ShouldBe("E3");
            result.ErrorMessage.ShouldBe("Account number does not existed");
        }
示例#4
0
        public void InsertInValidAmount()
        {
            //Arr
            var transaction = new TransactionBaseRequest(1, -500000, "VND");

            //Act
            var result = Assert.ThrowsAsync <CustomException>(() => _transactionService.Deposit(transaction));

            //Assert
            result.ShouldBeOfType <CustomException>();
            result.ErrorMessage.ShouldBe("Amount can not be negative");
            result.ErrorCode.ShouldBe("E6");
            result.AccountNumber.ShouldBe(1);
        }
示例#5
0
        public void InsertInValidAccountNumberAndCurrency()
        {
            //Arr
            var transaction = new TransactionBaseRequest(-4, 500000, null);

            //Act
            var result = Assert.ThrowsAsync <CustomException>(() => _transactionService.Deposit(transaction));

            //Assert
            result.ShouldBeOfType <CustomException>();
            result.ErrorMessage.ShouldBe("Account Number can not be negative");
            result.ErrorCode.ShouldBe("E5");
            result.AccountNumber.ShouldBe(-4);
        }
示例#6
0
        public void WithdrawOutOfBanlance()
        {
            //Arr
            var transaction = new TransactionBaseRequest(1, 2000, "USD");

            //Act
            var result = Assert.ThrowsAsync <CustomException>(() => _transactionService.Withdraw(transaction));

            //Assert
            result.ShouldBeOfType <CustomException>();
            result.AccountNumber.ShouldBe(1);
            result.ErrorCode.ShouldBe("E1");
            result.ErrorMessage.ShouldBe("The Balance is not enough for withdrawal");
        }
示例#7
0
        public void WithdrawNewCurrency()
        {
            //Arr
            var transaction = new TransactionBaseRequest(1, 500000, "VND");

            //Act
            var result = Assert.ThrowsAsync <CustomException>(() => _transactionService.Withdraw(transaction));

            //Assert
            result.ShouldBeOfType <CustomException>();
            result.AccountNumber.ShouldBe(1);
            result.ErrorCode.ShouldBe("E4");
            result.ErrorMessage.ShouldBe("This account doesn't have this currency. Please try with another currency");
        }
示例#8
0
        public void InsertInValidCurrency()
        {
            //Arr
            var transaction = new TransactionBaseRequest(1, 500000, null);

            //Act
            var result = Assert.ThrowsAsync <CustomException>(() => _transactionService.Withdraw(transaction));

            //Assert
            result.ShouldBeOfType <CustomException>();
            result.ErrorMessage.ShouldBe("Currency can not be null or empty");
            result.ErrorCode.ShouldBe("E7");
            result.AccountNumber.ShouldBe(1);
        }
示例#9
0
        public async Task <TransactionBaseResponse> Deposit(TransactionBaseRequest request)
        {
            request.Validate();

            //Check account valid
            var account = (await _uow.AccountInfoRepo.FindByConditionAsync(x => x.Id == request.AccountNumber && !x.IsDeleted)).FirstOrDefault();

            if (account == null)
            {
                throw new CustomException(ErrorCode.E3, request.AccountNumber);
            }

            var accountDetail = (await _uow.AccountDetailRepo.FindByConditionAsync(x => x.AcountInfoId == request.AccountNumber && x.Currency == request.Currency && !x.IsDeleted)).FirstOrDefault();

            //Check account existed with this currency
            if (accountDetail != null)
            {
                accountDetail.Balance += request.Amount;
                _uow.AccountDetailRepo.Update(accountDetail);
            }
            else
            {
                accountDetail = new AccountDetail
                {
                    AcountInfoId = request.AccountNumber,
                    Balance      = request.Amount,
                    Currency     = request.Currency,
                    IsDeleted    = false
                };
                _uow.AccountDetailRepo.Create(accountDetail);
            }

            InsertTransaction(request, Contanst.Message.DepositSucceeded);

            await _uow.SaveAsyn();

            return(new TransactionBaseResponse
            {
                AccountNumber = request.AccountNumber,
                Balance = accountDetail.Balance,
                Currency = accountDetail.Currency,
                Successful = true,
                Message = Contanst.Message.TransactionSucceeded
            });
        }
示例#10
0
        public async Task DepositNewCurrency()
        {
            //Arr
            var transaction = new TransactionBaseRequest(1, 500000, "VND");

            //Act
            var result = await _transactionService.Deposit(transaction);

            //Assert
            result.ShouldBeOfType <TransactionBaseResponse>();
            result.AccountNumber.ShouldBe(1);
            result.Balance.ShouldBe(500000);
            result.Currency.ShouldBe("VND");
            result.Successful.ShouldBe(true);
            result.Message.ShouldBe("Transaction succeeded");

            var trasactionHistory = (await _fakeuow.TransactionHistoryRepo.FindAllAsync()).OrderByDescending(x => x.Id).FirstOrDefault();

            trasactionHistory.AccountId.ShouldBe(1);
            trasactionHistory.Amount.ShouldBe(500000);
            trasactionHistory.Currency.ShouldBe("VND");
            trasactionHistory.IsSuccess.ShouldBe(true);
        }
 public async Task <TransactionBaseResponse> PostWithdraw(TransactionBaseRequest request)
 {
     return(await PostAsync <TransactionBaseRequest, TransactionBaseResponse>("account/withdraw", request));
 }
 public async Task <TransactionBaseResponse> PostDeposit(TransactionBaseRequest request)
 {
     return(await PostAsync <TransactionBaseRequest, TransactionBaseResponse>("account/deposit", request));
 }
示例#13
0
 public async Task <ActionResult> Withdraw([FromBody] TransactionBaseRequest request)
 {
     HttpContext.Session.SetInt32("AccountNumber", request.AccountNumber);
     return(Json(await _transactionService.Withdraw(request)));
 }