using LCU.Api.Internal.CoreApiWrapper.Configuration; using LCU.Api.Internal.CoreApiWrapper.Controllers; using LCU.Api.Internal.CoreApiWrapper.Services; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.CoreRequests; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Transaction; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace LCU.Api.Internal.CoreApiWrapperTest.Controllers { public class TransactionControllerTest { private TransactionController _transactionController; private Mock _mockTransactionService; private CoreApiWrapperConfig _coreApiWrapperConfig; [SetUp] public void SetUp() { _mockTransactionService = new Mock(); _coreApiWrapperConfig = new CoreApiWrapperConfig { FeatureFlags = new FeatureFlags { DisableCoreDBWrite = false } }; _transactionController = new TransactionController(_mockTransactionService.Object, _coreApiWrapperConfig); } [Test] public async Task PostMonetaryTransactions_OK() { _mockTransactionService.Setup(x => x.AddMonetaryTransactionsAsync(It.IsAny>())).ReturnsAsync( new List() { }); var groupRequest = new GroupedMonetaryTransactionRequest() { MonetaryTransactionRequests = new List() { new MonetaryTransactionRequest() { AccountNumber = 19617805142, TransactionAmount = -1.27, ApprovalPersonNumber = 5225, RequestNumber = "1", OverrideCashBoxNumber = 800, TransactionTypeCode = "DRIR", Description = "", BalanceTypes = new List { new BalanceType1() { BalanceCategoryCode = "UPFR", BalanceTypeCode = "DLR", BalanceTypeAmount = -1.27 } }, Funds = new List { new Fund() { ClearingCategoryCode = "IMED", FundAmount = -1.27, FundTypeCode = "EL", FundTypeDetailCode = "INTR", NumberOfItems = 1 } } } } }; var response = new MonetaryTransactionResponse() { WasSuccessful = false }; var listResponse = new List { response }; var listGroupRequest = new List { groupRequest }; var result = await _transactionController.PostMonetaryTransactions(listGroupRequest); var okResult = result as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task GetTransactionHistory_OK() { _mockTransactionService.Setup(x => x.GetTransactionHistory(123334234324, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021"), null)).ReturnsAsync( new List { new TransactionHistory() { AccountNumber = 123334234324, ActivityDateTime = Convert.ToDateTime("1/1/2021") }, new TransactionHistory() { AccountNumber = 123334234324, ActivityDateTime = Convert.ToDateTime("1/2/2021") } }).Verifiable(); var results = await _transactionController.GetTransactionHistory(123334234324, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021")); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); var result = okResult.Value as IEnumerable; Assert.NotNull(result); Assert.AreEqual(2, result.Count()); _mockTransactionService.Verify(); } [Test] public async Task GetTransactionHistory_Null_NotFoundException() { _mockTransactionService.Setup(x => x.GetTransactionHistory(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync((IEnumerable)null); var results = await _transactionController.GetTransactionHistory(1234555, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021")); Assert.NotNull(results); var notFoundRes = results as NotFoundResult; Assert.NotNull(notFoundRes); Assert.AreEqual(404, notFoundRes.StatusCode); } [Test] public async Task GetTransactionHistory_EmptyList_NoContentException() { _mockTransactionService.Setup(x => x.GetTransactionHistory(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(new List()); var results = await _transactionController.GetTransactionHistory(1234555, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021")); Assert.NotNull(results); var noContentResult = results as NoContentResult; Assert.NotNull(noContentResult); Assert.AreEqual(204, noContentResult.StatusCode); } [Test] public async Task GetTransactionHistory_Exception() { _mockTransactionService.Setup(x => x.GetTransactionHistory(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) .Throws(new Exception("Oops")); var results = await _transactionController.GetTransactionHistory(1234555, Convert.ToDateTime("12/25/2020"), Convert.ToDateTime("2/2/2021")); Assert.NotNull(results); var badRes = results as StatusCodeResult; Assert.NotNull(badRes); Assert.AreEqual(500, badRes.StatusCode); } [Test] public async Task GetTransactionsByDateSpan_OK() { _mockTransactionService.Setup(x => x.GetTransactionsByDateSpan(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(new List() { new TransactionAlertInfo() }); var results = await _transactionController.GetTransactionsByDateSpan(DateTime.UtcNow.AddMinutes(-1), DateTime.UtcNow, new string[1]); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); var result = okResult.Value as IEnumerable; Assert.NotNull(result); Assert.AreEqual(1, result.Count()); } [Test] public async Task GetTransactionsByDateSpan_Exception_DateOrder() { var results = await _transactionController.GetTransactionsByDateSpan(DateTime.UtcNow, DateTime.UtcNow.AddMinutes(-1)); Assert.NotNull(results); var badRes = results as BadRequestObjectResult; Assert.NotNull(badRes); Assert.AreEqual(400, badRes.StatusCode); } [Test] public async Task GetTransactionsByDateSpan_Exception_DateMinimum() { var results = await _transactionController.GetTransactionsByDateSpan(DateTime.MinValue, DateTime.UtcNow); Assert.NotNull(results); var badRes = results as BadRequestObjectResult; Assert.NotNull(badRes); Assert.AreEqual(400, badRes.StatusCode); } } }