using System; using System.Collections.Generic; using System.Threading.Tasks; using Moq; using NUnit.Framework; using LCU.Library.Internal.DocumentIngestorModels.Models; using LCU.Library.Internal.LcuMassTransitModels; using LCU.Library.Internal.DocumentIngestorModels.Entities; using LCU.Library.Internal.DocumentIngestorModels.Enums; using LCU.Library.Internal.Exceptions; using LCU.API.Internal.DocumentIngestor.Services.IngestionOperationServices; using LCU.API.Internal.DocumentIngestor.Services.MicroApiServices; using LCU.API.Internal.DocumentIngestor.Configurations; using LCU.API.Internal.DocumentIngestor.Services; using LCU.API.Internal.DocumentIngestor.Services.QueueServices; using LCU.API.Internal.DocumentIngestor.Services.PdfParserServices; using LCU.Library.Internal.FileOperationsModels.Models; using LCU.Library.Internal.FileOperationsModels.Models.NameSettings; using LCU.Library.Internal.LCUServiceFactory.Services; namespace LCU.API.Internal.DocumentIngestorTests.Services.IngestionOperationServices; public class PdfPartitionerServiceTest { private PdfPartitionerService _pdfPartitionerService; private ConnectionConfiguration _connectionConfiguration; private Mock _mockPdfPartitionerRunInfoService; private Mock _mockFileOperationsApiService; private Mock _mockQueuePdfPartitionerCompletionService; private Mock> _mockLcuServiceFactory; [SetUp] public void Setup() { _connectionConfiguration = new ConnectionConfiguration { HostUrl = "test.com", UserName = "testUserName", Password = "testpassword" }; var receiveEndpointConfigurations = new ReceiveEndpointConfigurations { PdfPartitionerCompletionEndpoint = new ReceiveEndpointConfiguration { ReceiveEndpoint = "testCompletionReceiveEndpoint", ReceiveEndpointType = "exchange" } }; _mockPdfPartitionerRunInfoService = new Mock(); _mockFileOperationsApiService = new Mock(); _mockQueuePdfPartitionerCompletionService = new Mock(); _mockLcuServiceFactory = new Mock>(); _pdfPartitionerService = new PdfPartitionerService(_connectionConfiguration, receiveEndpointConfigurations, _mockPdfPartitionerRunInfoService.Object, _mockFileOperationsApiService.Object, _mockQueuePdfPartitionerCompletionService.Object, _mockLcuServiceFactory.Object); } [Test] public void HandlePdfPartition_ArgumentNullException_RequestNull() { PdfPartitionerRequest request = null; Assert.ThrowsAsync(async () => await _pdfPartitionerService.HandlePdfPartition(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Never); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); _mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public void HandlePdfPartition_ServiceException_BuildDynamicDirectoryList_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ThrowsAsync(new Exception("Error")); Assert.ThrowsAsync(async () => await _pdfPartitionerService.HandlePdfPartition(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); _mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public void HandlePdfPartition_ServiceException_PartitionerRunInfo_SaveAsync_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var indexService = new Mock(); _mockLcuServiceFactory.Setup(x => x.GetService(request.PdfParserType)).Returns(indexService.Object); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ThrowsAsync(new Exception("Error")); Assert.ThrowsAsync(async () => await _pdfPartitionerService.HandlePdfPartition(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public async Task HandlePdfPartition_ServiceException_DetermineIndexFile_BuildDynamicFileList_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement, DynamicIndexFileName = "TestDynamicIndexFileName", DynamicPdfName = "TestDynamicPdfname" }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var indexService = new Mock(); _mockLcuServiceFactory.Setup(x => x.GetService(request.PdfParserType)).Returns(indexService.Object); var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.FosLoanStatement, "\\\\Tester\\path", 2); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName))) .ThrowsAsync(new Exception("Error")); await _pdfPartitionerService.HandlePdfPartition(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public async Task HandlePdfPartition_ServiceException_DetermineAllPdfsInDirectory_BuildDynamicFile_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement, DynamicIndexFileName = "TestDynamicIndexFileName", DynamicPdfName = "TestDynamicPdfname" }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var indexService = new Mock(); _mockLcuServiceFactory.Setup(x => x.GetService(request.PdfParserType)).Returns(indexService.Object); var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.FosLoanStatement, "\\\\Tester\\path", 2); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName))) .ReturnsAsync("TestDynamicIndexFileName"); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == "{Regex0}"))) .ThrowsAsync(new Exception("Error")); await _pdfPartitionerService.HandlePdfPartition(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(2)); indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public async Task HandlePdfPartition_ServiceException_FosLoanStatementPdfService_DetermineBatchParsePdfRequest_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement, DynamicIndexFileName = "TestDynamicIndexFileName.txt", DynamicPdfName = "TestDynamicPdfname", DynamicPdfSettings = new DynamicNameSetting() }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var indexService = new Mock(); _mockLcuServiceFactory.Setup(x => x.GetService(request.PdfParserType)).Returns(indexService.Object); var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.FosLoanStatement, "\\\\Tester\\path", 2); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName))) .ReturnsAsync("TestDynamicIndexFileName"); var pdfFileList = new List { "TestDynamicPdfname.pdf" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == "{Regex0}.(?i:pdf)"))) .ReturnsAsync(pdfFileList); indexService.Setup(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception("Error")); await _pdfPartitionerService.HandlePdfPartition(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(2)); indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public async Task HandlePdfPartition_ServiceException_QueueBatchPdfParser_QueuedTwice() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement, DynamicIndexFileName = "TestDynamicIndexFileName", DynamicPdfName = "TestDynamicPdfname" }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var indexService = new Mock(); _mockLcuServiceFactory.Setup(x => x.GetService(request.PdfParserType)).Returns(indexService.Object); var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.FosLoanStatement, "\\\\Tester\\path", 2); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName))) .ReturnsAsync("TestDynamicIndexFileName"); var pdfFileList = new List { "TestDynamicPdfname.pdf" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == "{Regex0}.(?i:pdf)"))) .ReturnsAsync(pdfFileList); var batchPdfParserRequest = new BatchParsePdfRequest { RootPath = "\\\\Tester\\path", PdfName = "TestDynamicPdfname", BatchPdfs = new List { new BatchPdf { PageStart = 1, PageStop = 2, ParsedPdfname = "TestDynamicPdfname_Test" } } }; indexService.Setup(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync(batchPdfParserRequest); await _pdfPartitionerService.HandlePdfPartition(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(2)); indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Exactly(2)); } [Test] public void Osg_HandlePdfPartition_ArgumentNullException_RequestNull() { PdfPartitionerRequest request = null; Assert.ThrowsAsync(async () => await _pdfPartitionerService.HandlePdfPartition(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Never); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); _mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public void Osg_HandlePdfPartition_ServiceException_BuildDynamicDirectoryList_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.OsgDnaNoticesDocument }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ThrowsAsync(new Exception("Error")); Assert.ThrowsAsync(async () => await _pdfPartitionerService.HandlePdfPartition(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public void Osg_HandlePdfPartition_ServiceException_PartitionerRunInfo_SaveAsync_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.OsgDnaNoticesDocument }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ThrowsAsync(new Exception("Error")); Assert.ThrowsAsync(async () => await _pdfPartitionerService.HandlePdfPartition(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); _mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public async Task Osg_HandlePdfPartition_ServiceException_DetermineIndexFile_BuildDynamicFileList_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.OsgDnaNoticesDocument, DynamicIndexFileName = "TestDynamicIndexFileName", DynamicPdfName = "TestDynamicPdfname" }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.OsgDnaNoticesDocument, "\\\\Tester\\path", 2); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName))) .ThrowsAsync(new Exception("Error")); await _pdfPartitionerService.HandlePdfPartition(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); _mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public async Task Osg_HandlePdfPartition_ServiceException_DetermineAllPdfsInDirectory_BuildDynamicFile_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.OsgDnaNoticesDocument, DynamicIndexFileName = "TestDynamicIndexFileName", DynamicPdfName = "TestDynamicPdfname" }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.OsgDnaNoticesDocument, "\\\\Tester\\path", 2); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName))) .ReturnsAsync("TestDynamicIndexFileName"); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == "{Regex0}"))) .ThrowsAsync(new Exception("Error")); await _pdfPartitionerService.HandlePdfPartition(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(2)); _mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny()), Times.Never); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public async Task HandlePdfPartition_ServiceException_OsgDnaNoticesPdfService_DetermineBatchParsePdfRequest_ThrowsException() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.OsgDnaNoticesDocument, DynamicIndexFileName = "TestDynamicIndexFileName.txt", DynamicPdfName = "TestDynamicPdfname", DynamicPdfSettings = new DynamicNameSetting() }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var indexService = new Mock(); _mockLcuServiceFactory.Setup(x => x.GetService(request.PdfParserType)).Returns(indexService.Object); var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.OsgDnaNoticesDocument, "\\\\Tester\\path", 2); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName))) .ReturnsAsync("TestDynamicIndexFileName"); var pdfFileList = new List { "TestDynamicPdfname.pdf" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == "{Regex0}.(?i:pdf)"))) .ReturnsAsync(pdfFileList); indexService.Setup(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception("Error")); await _pdfPartitionerService.HandlePdfPartition(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(2)); indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Never); } [Test] public async Task Osg_HandlePdfPartition_ServiceException_QueueBatchPdfParser_QueuedTwice() { var request = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.OsgDnaNoticesDocument, DynamicIndexFileName = "TestDynamicIndexFileName", DynamicPdfName = "TestDynamicPdfname" }; var dynamicDirectoryListResult = new List { "TestParentDynamicDirectory1", "TestParentDynamicDirectory2" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny())).ReturnsAsync(dynamicDirectoryListResult); var indexService = new Mock(); _mockLcuServiceFactory.Setup(x => x.GetService(request.PdfParserType)).Returns(indexService.Object); var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.OsgDnaNoticesDocument, "\\\\Tester\\path", 2); _mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName))) .ReturnsAsync("TestDynamicIndexFileName"); var pdfFileList = new List { "TestDynamicPdfname.pdf" }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.Is(dynamicFileListRequest => dynamicFileListRequest.Filename == "{Regex0}.(?i:pdf)"))) .ReturnsAsync(pdfFileList); var batchPdfParserRequest = new BatchParsePdfRequest { RootPath = "\\\\Tester\\path", PdfName = "TestDynamicPdfname", BatchPdfs = new List { new BatchPdf { PageStart = 1, PageStop = 2, ParsedPdfname = "TestDynamicPdfname_Test" } } }; indexService.Setup(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync(batchPdfParserRequest); await _pdfPartitionerService.HandlePdfPartition(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny()), Times.Once); _mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(2)); indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny()), Times.Exactly(2)); } }