using System; using System.Threading.Tasks; using System.Collections.Generic; using Moq; using NUnit.Framework; using LCU.API.Internal.DocumentIngestor.Services.MicroApiServices; using LCU.API.Internal.DocumentIngestor.Services.IndexParserServices; using LCU.Library.Internal.DocumentIngestorModels.Models; using LCU.Library.Internal.DocumentIngestorModels.Enums; using LCU.Library.Internal.DocumentIngestorModels.Models.IndexFileDocuments; using LCU.Library.Internal.FileOperationsModels.Models; using LCU.Library.Internal.FileOperationsModels.Models.NameSettings; using LCU.Library.Internal.LCUServiceFactory.Configurations; namespace LCU.API.Internal.DocumentIngestorTests.Services.IndexParserServices; public class FosLoanStatementIndexServiceTest { private FosLoanStatementIndexService _fosLoanStatementIndexService; private Mock _mockFileOperationsApiService; [SetUp] public void Setup() { _mockFileOperationsApiService = new Mock(); var serviceFactoryConfiguration = new ServicesFactoryConfiguration { ServiceFactoryRegistrations = new List { new() { ServiceInterfaceName = "IIndexParserService", ServiceRegistrations = new List { new() { ServiceName = "IndexParserService", ServiceId = "4" }, new() { ServiceName = "IndexParserService", ServiceId = "3" } } } } }; _fosLoanStatementIndexService = new FosLoanStatementIndexService(_mockFileOperationsApiService.Object, serviceFactoryConfiguration); } [Test] public async Task HandleIndexRequest_IngestorRequest_Null_IngestorResult_Failure() { IngestorRequest request = null; var result = await _fosLoanStatementIndexService.HandleIndexRequest(request); Assert.IsTrue(result.FatalFailure); _mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny()), Times.Never); } [Test] public async Task HandleIndexRequest_IngestorRequest_Success() { var rootPath = "\\Test\\"; var request = new IngestorRequest() { RootPath = rootPath, IndexFileName = "NAU123456789.91.21.txt", IngestorType = IngestorTypes.FosLoanStatement }; var fileContent = "\"Mortgage Statement\"|\"11111111111111111111111\"|\"11\"|\"N\"|\"1111\"" + "|\"Test, Tester\"|\"test@test.com\"|\"111111111\"|\"2\"|\"4\"|\"test.pdf\"\n" + "\"Loan Statement\"|\"11111111111111111111111\"|\"11\"|\"N\"|\"1111\"" + "|\"Tester Testing\"|\"test1@test.com\"|\"111111111\"|\"1\"|\"3\"|\"tester.pdf\""; var requestResponse = new RequestResponse() { IsSuccessful = true }; var dynamicFileRequest = new DynamicFileListRequest() { Path = rootPath, Filename = "replaceTag.pdf", DynamicFileSettings = new DynamicNameSetting() { RegexSettings = new List() { new RegexSetting() { Tag = "replaceTag", Regex = ".*" } } } }; _mockFileOperationsApiService.Setup(x => x.GetFileContent(It.IsAny())).ReturnsAsync(fileContent); var result = await _fosLoanStatementIndexService.HandleIndexRequest(request); Assert.IsFalse(result.FatalFailure); Assert.AreEqual(2, result.ProcessingRequests.Count); _mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny()), Times.Once); } [Test] public async Task HandleIndexRequest_IngestorRequest_GetFileContent_ThrowsException_Failure() { var request = new IngestorRequest() { RootPath = "\\Test\\", IndexFileName = "Test.csv", IngestorType = IngestorTypes.FosLoanStatement }; _mockFileOperationsApiService.Setup(x => x.GetFileContent(It.IsAny())).ThrowsAsync(new Exception("Error")); var result = await _fosLoanStatementIndexService.HandleIndexRequest(request); Assert.IsTrue(result.FatalFailure); _mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny()), Times.Once); } [Test] public void PrepareRunInfoAndProcessRequests_IngestorRunInfo_ProcessRequests_Created() { var request = new IngestorRequest() { RootPath = "\\Test\\", IndexFileName = "Test.csv", IngestorType = IngestorTypes.FosLoanStatement }; var documentMetaData = new List() { new FosLoanStatement() { AccountNumber = "111111", CreationDate = "04012023", DocName = "test.pdf", EmailAddress = "test@test.com", EntityName = "Test Tester", StartingPage = "2", NumberOfPages = "3", DocType = "Mortgage Statement" } }; var ingestorResult = new IngestorResult(); var result = _fosLoanStatementIndexService.PrepareRunInfoAndProcessRequests(request, documentMetaData, ingestorResult); Assert.IsFalse(result.FatalFailure); Assert.AreEqual(1, result.ProcessingRequests.Count); Assert.AreEqual("Test.csv", result.IngestorRunInfo.IndexFileName); Assert.AreEqual(IngestorTypes.FosLoanStatement, result.IngestorRunInfo.IngestorType); Assert.AreEqual("\\Test\\", result.IngestorRunInfo.IndexFilePath); } }