using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Castle.Core.Internal; using Moq; using NUnit.Framework; using LCU.Api.Internal.CoreApiWrapper.Services; using LCU.Library.Internal.CoreApiWrapperLib.DataAccess; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Transaction; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.CoreRequests; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Accounts; namespace LCU.Api.Internal.CoreApiWrapperTest.Service { public class TransactionServiceTest { private TransactionService _transactionService; private Mock _mockTransactionDao; private Mock _mockAccountService; [SetUp] public void SetUp() { _mockTransactionDao = new Mock(); _mockAccountService = new Mock(); _transactionService = new TransactionService(_mockTransactionDao.Object, _mockAccountService.Object); } [Test] public async Task GetTransactionHistory_Return_Two() { var setupAccountNumber = 8675309143; var accountResponse = new Account() { Id="fasdfsda;fjsdipfu0-231231" }; _mockAccountService.Setup(x => x.GetAccountDetails(It.IsAny(), It.IsAny())).ReturnsAsync(accountResponse).Verifiable(); _mockTransactionDao .Setup(x => x.FindTransactionHistoryById(It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync( new List() { new TransactionHistory() { AccountNumber = setupAccountNumber, ActivityDateTime = Convert.ToDateTime("1/1/2021"), AllowCustomerView = true, Amount = 220, BalanceAccountNumber = 2, BalanceTypeDescription = "Note Interest (Excess)", CurrTransactionStatusCode = "C", DueDate = null, EffectiveDate = "2021-10-14", ExternalTransactionDescription = null, Id = "22", IsDisputedTransaction = false, OnlineCheckTraceNumber = 0, PostingDate = "2021-10-15", RunningBalance = (decimal?)3529.53, TimeUniqueNumber = 86570239, TransactionNumber = 22, TransactionReference = $"{setupAccountNumber} - 22", TransactionStatusDescription = "Completed", TransactionTypeCode = "SPMT", TransactionTypeDescription = "Regular Payment LandmarkCU TRANSFER 12345", Uid = "abcd77299_sABCDMD]MYo5crdZyPN3s2QAHx[CHxgigabcdeYuALuVGL9Jklm_22" }, new TransactionHistory() { AccountNumber = setupAccountNumber, ActivityDateTime = Convert.ToDateTime("1/2/2021"), AllowCustomerView = true, Amount = 30, BalanceAccountNumber = 2, BalanceTypeDescription = "Note Interest (Excess)", CurrTransactionStatusCode = "C", DueDate = null, EffectiveDate = "2021-10-14", ExternalTransactionDescription = null, Id = "23", IsDisputedTransaction = false, OnlineCheckTraceNumber = 0, PostingDate = "2021-10-15", RunningBalance = (decimal?)3559.53, TimeUniqueNumber = 86570239, TransactionNumber = 23, TransactionReference = $"{setupAccountNumber} - 23", TransactionStatusDescription = "Completed", TransactionTypeCode = "SPMT", TransactionTypeDescription = "Regular Payment LandmarkCU TRANSFER 12346", Uid = "abcd77299_sABCDMD]MYo5crdZyPN3s2QAHx[CHxgigabcdeYuALuVGL9Jklm_23" } }) .Verifiable(); var results = await _transactionService.GetTransactionHistory(1234555, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021"), null); var resultsList = results.ToList(); Assert.NotNull(results); Assert.AreEqual(2, resultsList.Count); Assert.True(resultsList.Any(x => x.AccountNumber == setupAccountNumber)); _mockAccountService.Verify(); _mockTransactionDao.Verify(); } [Test] public async Task GetTransactionHistory_NullTransactions_EmptyList() { var setupAccountNumber = 8675309143; var accountResponse = new Account() { Id="fasdfsda;fjsdipfu0-231231" }; _mockAccountService.Setup(x => x.GetAccountDetails(It.IsAny(), It.IsAny())).ReturnsAsync(accountResponse).Verifiable(); _mockTransactionDao .Setup(x => x.FindTransactionHistoryById(It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync((IEnumerable)null) .Verifiable(); var results = await _transactionService.GetTransactionHistory(1234555, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021"), null); Assert.NotNull(results); var resultsList = results.ToList(); Assert.IsEmpty(resultsList); _mockAccountService.Verify(); _mockTransactionDao.Verify(); } [Test] public async Task GetTransactionHistory_NoAccount_ReturnNull() { _mockAccountService.Setup(x => x.GetAccountDetails(It.IsAny(), It.IsAny())).ReturnsAsync((Account)null).Verifiable(); var results = await _transactionService.GetTransactionHistory(1234555, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021"), null); Assert.Null(results); _mockAccountService.Verify(); _mockTransactionDao.Verify( x => x.FindTransactionHistoryById(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void GetTransactionHistory_TransactionDao_Exception() { var accountResponse = new Account() { Id = "fasdfsda;fjsdipfu0-231231" }; _mockAccountService.Setup(x => x.GetAccountDetails(It.IsAny(), It.IsAny())).ReturnsAsync(accountResponse).Verifiable(); _mockTransactionDao.Setup(x => x.FindTransactionHistoryById(It.IsAny(), It.IsAny(), It.IsAny())) .Throws(new Exception("Ohh nooo")); Assert.ThrowsAsync(async () => await _transactionService.GetTransactionHistory(1234555, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021"), null)); _mockAccountService.Verify(); } [Test] public void GetTransactionHistory_AccountService_Exception() { _mockAccountService.Setup(x => x.GetAccountDetails(It.IsAny(), It.IsAny())).Throws(new Exception("Ohh nooo")); Assert.ThrowsAsync(async () => await _transactionService.GetTransactionHistory(1234555, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021"), null)); _mockAccountService.Verify(); } [Test] public async Task GetTransactionsByDateSpan_OK() { _mockTransactionDao.Setup(x => x.GetTransactionsByDateSpan(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(new List() { new TransactionAlertInfo() }); var results = await _transactionService.GetTransactionsByDateSpan(DateTime.UtcNow.AddMinutes(-1), DateTime.UtcNow, new string[1]); Assert.NotNull(results); var resultsList = results.ToList(); Assert.AreEqual(1, resultsList.Count); } [Test] public async Task GetTransactionsByDateSpan_Exception() { _mockTransactionDao.Setup(x => x.GetTransactionsByDateSpan(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception("Exception!")); Assert.ThrowsAsync(async () => await _transactionService.GetTransactionsByDateSpan(DateTime.UtcNow.AddMinutes(-1), DateTime.UtcNow, new string[1])); } } }