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); }
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); }