Files
2026-03-25 14:50:13 -05:00

579 lines
32 KiB
C#

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<IPdfPartitionerRunInfoService> _mockPdfPartitionerRunInfoService;
private Mock<IFileOperationsApiService> _mockFileOperationsApiService;
private Mock<IQueuePdfPartitionerCompletionService> _mockQueuePdfPartitionerCompletionService;
private Mock<ILcuServiceFactory<IPdfParserService>> _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<IPdfPartitionerRunInfoService>();
_mockFileOperationsApiService = new Mock<IFileOperationsApiService>();
_mockQueuePdfPartitionerCompletionService = new Mock<IQueuePdfPartitionerCompletionService>();
_mockLcuServiceFactory = new Mock<ILcuServiceFactory<IPdfParserService>>();
_pdfPartitionerService = new PdfPartitionerService(_connectionConfiguration,
receiveEndpointConfigurations,
_mockPdfPartitionerRunInfoService.Object,
_mockFileOperationsApiService.Object,
_mockQueuePdfPartitionerCompletionService.Object,
_mockLcuServiceFactory.Object);
}
[Test]
public void HandlePdfPartition_ArgumentNullException_RequestNull()
{
PdfPartitionerRequest request = null;
Assert.ThrowsAsync<ArgumentNullException>(async () => await _pdfPartitionerService.HandlePdfPartition(request));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Never);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<DynamicDirectoryListRequest>())).ThrowsAsync(new Exception("Error"));
Assert.ThrowsAsync<ServiceException>(async () => await _pdfPartitionerService.HandlePdfPartition(request));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var indexService = new Mock<IPdfParserService>();
_mockLcuServiceFactory.Setup(x => x.GetService(request.PdfParserType)).Returns(indexService.Object);
_mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>())).ThrowsAsync(new Exception("Error"));
Assert.ThrowsAsync<ServiceException>(async () => await _pdfPartitionerService.HandlePdfPartition(request));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var indexService = new Mock<IPdfParserService>();
_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<PdfPartitionerRunInfo>())).ReturnsAsync(pdfPartitionerRunInfo);
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName)))
.ThrowsAsync(new Exception("Error"));
await _pdfPartitionerService.HandlePdfPartition(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var indexService = new Mock<IPdfParserService>();
_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<PdfPartitionerRunInfo>())).ReturnsAsync(pdfPartitionerRunInfo);
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == request.DynamicIndexFileName)))
.ReturnsAsync("TestDynamicIndexFileName");
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest => dynamicFileListRequest.Filename == "{Regex0}")))
.ThrowsAsync(new Exception("Error"));
await _pdfPartitionerService.HandlePdfPartition(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var indexService = new Mock<IPdfParserService>();
_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<PdfPartitionerRunInfo>())).ReturnsAsync(pdfPartitionerRunInfo);
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == request.DynamicIndexFileName)))
.ReturnsAsync("TestDynamicIndexFileName");
var pdfFileList = new List<string>
{
"TestDynamicPdfname.pdf"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == "{Regex0}.(?i:pdf)")))
.ReturnsAsync(pdfFileList);
indexService.Setup(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).ThrowsAsync(new Exception("Error"));
await _pdfPartitionerService.HandlePdfPartition(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Exactly(2));
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var indexService = new Mock<IPdfParserService>();
_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<PdfPartitionerRunInfo>())).ReturnsAsync(pdfPartitionerRunInfo);
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == request.DynamicIndexFileName)))
.ReturnsAsync("TestDynamicIndexFileName");
var pdfFileList = new List<string>
{
"TestDynamicPdfname.pdf"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == "{Regex0}.(?i:pdf)")))
.ReturnsAsync(pdfFileList);
var batchPdfParserRequest = new BatchParsePdfRequest
{
RootPath = "\\\\Tester\\path",
PdfName = "TestDynamicPdfname",
BatchPdfs = new List<BatchPdf>
{
new BatchPdf
{
PageStart = 1,
PageStop = 2,
ParsedPdfname = "TestDynamicPdfname_Test"
}
}
};
indexService.Setup(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.ReturnsAsync(batchPdfParserRequest);
await _pdfPartitionerService.HandlePdfPartition(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Exactly(2));
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), Times.Exactly(2));
}
[Test]
public void Osg_HandlePdfPartition_ArgumentNullException_RequestNull()
{
PdfPartitionerRequest request = null;
Assert.ThrowsAsync<ArgumentNullException>(async () => await _pdfPartitionerService.HandlePdfPartition(request));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Never);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<DynamicDirectoryListRequest>())).ThrowsAsync(new Exception("Error"));
Assert.ThrowsAsync<ServiceException>(async () => await _pdfPartitionerService.HandlePdfPartition(request));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
_mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>())).ThrowsAsync(new Exception("Error"));
Assert.ThrowsAsync<ServiceException>(async () => await _pdfPartitionerService.HandlePdfPartition(request));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.OsgDnaNoticesDocument, "\\\\Tester\\path", 2);
_mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>())).ReturnsAsync(pdfPartitionerRunInfo);
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest => dynamicFileListRequest.Filename == request.DynamicIndexFileName)))
.ThrowsAsync(new Exception("Error"));
await _pdfPartitionerService.HandlePdfPartition(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var pdfPartitionerRunInfo = new PdfPartitionerRunInfo(Convert.ToDateTime("1/1/2022"), PdfParserTypes.OsgDnaNoticesDocument, "\\\\Tester\\path", 2);
_mockPdfPartitionerRunInfoService.Setup(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>())).ReturnsAsync(pdfPartitionerRunInfo);
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == request.DynamicIndexFileName)))
.ReturnsAsync("TestDynamicIndexFileName");
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest => dynamicFileListRequest.Filename == "{Regex0}")))
.ThrowsAsync(new Exception("Error"));
await _pdfPartitionerService.HandlePdfPartition(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockLcuServiceFactory.Verify(x => x.GetService(It.IsAny<string>()), Times.Never);
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var indexService = new Mock<IPdfParserService>();
_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<PdfPartitionerRunInfo>())).ReturnsAsync(pdfPartitionerRunInfo);
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == request.DynamicIndexFileName)))
.ReturnsAsync("TestDynamicIndexFileName");
var pdfFileList = new List<string>
{
"TestDynamicPdfname.pdf"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == "{Regex0}.(?i:pdf)")))
.ReturnsAsync(pdfFileList);
indexService.Setup(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())).ThrowsAsync(new Exception("Error"));
await _pdfPartitionerService.HandlePdfPartition(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Exactly(2));
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), 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<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
var indexService = new Mock<IPdfParserService>();
_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<PdfPartitionerRunInfo>())).ReturnsAsync(pdfPartitionerRunInfo);
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == request.DynamicIndexFileName)))
.ReturnsAsync("TestDynamicIndexFileName");
var pdfFileList = new List<string>
{
"TestDynamicPdfname.pdf"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.Is<DynamicFileListRequest>(dynamicFileListRequest =>
dynamicFileListRequest.Filename == "{Regex0}.(?i:pdf)")))
.ReturnsAsync(pdfFileList);
var batchPdfParserRequest = new BatchParsePdfRequest
{
RootPath = "\\\\Tester\\path",
PdfName = "TestDynamicPdfname",
BatchPdfs = new List<BatchPdf>
{
new BatchPdf
{
PageStart = 1,
PageStop = 2,
ParsedPdfname = "TestDynamicPdfname_Test"
}
}
};
indexService.Setup(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()))
.ReturnsAsync(batchPdfParserRequest);
await _pdfPartitionerService.HandlePdfPartition(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockPdfPartitionerRunInfoService.Verify(x => x.SaveAsync(It.IsAny<PdfPartitionerRunInfo>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
indexService.Verify(x => x.DetermineBatchParsePdfRequest(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Exactly(2));
_mockQueuePdfPartitionerCompletionService.Verify(x => x.QueuePdfPartitionerCompletionRequest(It.IsAny<PdfPartitionerResult>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.QueueBatchPdfParser(It.IsAny<BatchParsePdfRequest>()), Times.Exactly(2));
}
}