Exemple #1
0
        public virtual async Task <TransferMoneyResultDto> SaveTransferringMoney(TransferMoneyFullDto dto)
        {
            TransferMoneyResultDto resultDto = new TransferMoneyResultDto();

            using (IDbContextTransaction transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    Statement senderStatement = await _statementRepository.Add(new Statement
                    {
                        Account       = dto.sender,
                        StatementType = StatementType.Transfer,
                        Fee           = dto.transfer_fee,
                        Amount        = -dto.amount,
                        CreateAt      = dto.transfer_date
                    });

                    Statement payeeStatement = await _statementRepository.Add(new Statement
                    {
                        Account       = dto.payee,
                        StatementType = StatementType.Deposit,
                        Fee           = dto.transfer_fee,
                        Amount        = dto.amount,
                        CreateAt      = dto.transfer_date
                    });

                    Transaction trasactionResult = await Add(new Transaction
                    {
                        PayeeStatement  = payeeStatement,
                        SenderStatement = senderStatement,
                        TransferAt      = dto.transfer_date
                    });

                    await transaction.CommitAsync();

                    resultDto.success = true;
                }
                catch (Exception ex)
                {
                    throw new TransactionFailureException("transaction error", ex);
                }
            }

            return(resultDto);
        }
Exemple #2
0
        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);
        }