Exemple #1
0
        public void MakeTransfer_Without_ValidBalance_ReturnsNotSuffientFunds()
        {
            // Arrange
            var transferAddModel = new TransferAddModel()
            {
                Amount = 1000,
                ReceiverAccountNumber = 99,
                SenderAccountNumber   = 98
            };

            // Act
            var createdResponse = _accountingController.Create(transferAddModel).Result;
            // Assert
            var objectResult = Assert.IsType <ObjectResult>(createdResponse);

            Assert.Equal(10051, objectResult.StatusCode);
        }
Exemple #2
0
        public void MakeTransfer_Without_SameCurrencyCode_ReturnsInvalidTransaction()
        {
            // Arrange
            var transferAddModel = new TransferAddModel()
            {
                Amount = 10,
                ReceiverAccountNumber = 99,
                SenderAccountNumber   = 97
            };

            // Act
            var createdResponse = _accountingController.Create(transferAddModel).Result;
            // Assert
            var objectResult = Assert.IsType <ObjectResult>(createdResponse);

            Assert.Equal(10012, objectResult.StatusCode);
        }
Exemple #3
0
        public async Task <IActionResult> Create(TransferAddModel transfer)
        {
            ResultLog resultLog = new ResultLog();

            if (ModelState.IsValid)
            {
                var isSenderExist = await _redisService.IsExistKey(accountTableKey, transfer.SenderAccountNumber);

                var isReceiverExist = await _redisService.IsExistKey(accountTableKey, transfer.ReceiverAccountNumber);

                //Check accounts
                if (!isSenderExist || !isReceiverExist)
                {
                    return(StatusCode((int)Enums.Enums.StatusCode.INVALID_CARD_NUMBER,
                                      ActionResultHelper.CreateActionResultJson(
                                          Enums.Enums.StatusCode.INVALID_CARD_NUMBER,
                                          "Please check accounts again")));
                }
                var sender = await _accountService.GetHashOneAsync(accountTableKey, transfer.SenderAccountNumber);

                var receiver = await _accountService.GetHashOneAsync(accountTableKey, transfer.ReceiverAccountNumber);

                //Check Currency Type is same
                if (!sender.CurrencyCode.Equals(receiver.CurrencyCode))
                {
                    return(StatusCode((int)Enums.Enums.StatusCode.INVALID_TRANSACTION,
                                      ActionResultHelper.CreateActionResultJson(
                                          Enums.Enums.StatusCode.INVALID_TRANSACTION,
                                          "CurrencyCode of the accounts are not same")));
                }

                //Check sender balance
                if (sender.Balance < transfer.Amount)
                {
                    return(StatusCode((int)Enums.Enums.StatusCode.NOT_SUFFICIENT_FUNDS,
                                      ActionResultHelper.CreateActionResultJson(
                                          Enums.Enums.StatusCode.NOT_SUFFICIENT_FUNDS,
                                          "There is not enough money in your account")));
                }

                Transfer tr = new Transfer
                {
                    SenderAccountNumber   = transfer.SenderAccountNumber,
                    ReceiverAccountNumber = transfer.ReceiverAccountNumber,
                    Amount = transfer.Amount
                };

                var operationResult = await _accountService.MakeTransfer(tr);


                if (operationResult)
                {
                    var r = await _redisService.CreateHashSetDataAsync(transferTableKey, new Random().Next(int.MinValue, int.MaxValue), tr);

                    resultLog.IsError = !r;
                    return(Ok(resultLog));
                }
                resultLog.IsError = true;
                return(BadRequest(resultLog));
            }
            return(ValidationProblem());
        }