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.ApiResponse.Models; using Newtonsoft.Json; using LCU.Library.Internal.FileOperationsModels.Models.NameSettings; namespace LCU.API.Internal.DocumentIngestorTests.Services.IngestionOperationServices; public class PdfPartitionerCompletionServiceTest { private PdfPartitionerCompletionService _pdfPartitionerCompletionService; private Mock _mockPdfPartitionerRunInfoService; private Mock _mockPdfPartitionerLogService; [SetUp] public void Setup() { _mockPdfPartitionerRunInfoService = new Mock(); _mockPdfPartitionerLogService = new Mock(); _pdfPartitionerCompletionService = new PdfPartitionerCompletionService(_mockPdfPartitionerRunInfoService.Object, _mockPdfPartitionerLogService.Object); } [Test] public void HandlePdfPartitionerCompletion_ArgumentNullException_ResponseNull() { Response response = null; Assert.ThrowsAsync(async () => await _pdfPartitionerCompletionService.HandlePdfPartitionerCompletion(response)); _mockPdfPartitionerRunInfoService.Verify(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny()), Times.Never); _mockPdfPartitionerLogService.Verify(x => x.SaveListAsync(It.IsAny(), It.IsAny>()), Times.Never); _mockPdfPartitionerLogService.Verify(x => x.GetByPdfPartitionerRunInfoIdAsync(It.IsAny()), Times.Never); } [Test] public void HandlePdfPartitionerCompletion_ArgumentNullException_PdfPartitionerResultNull() { PdfPartitionerResult result = null; var response = new Response { ResponsePayload = JsonConvert.SerializeObject(result) }; Assert.ThrowsAsync(async () => await _pdfPartitionerCompletionService.HandlePdfPartitionerCompletion(response)); _mockPdfPartitionerRunInfoService.Verify(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny()), Times.Never); _mockPdfPartitionerLogService.Verify(x => x.SaveListAsync(It.IsAny(), It.IsAny>()), Times.Never); _mockPdfPartitionerLogService.Verify(x => x.GetByPdfPartitionerRunInfoIdAsync(It.IsAny()), Times.Never); } [Test] public void HandlePdfPartitionerCompletion_ServiceException_IncreaseCountsAndUpdate_ThrowException() { var pdfPartitionerRequest = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement, DynamicIndexFileName = "TestDynamicIndexFileName.txt", DynamicPdfName = "TestDynamicPdfname", DynamicPdfSettings = new DynamicNameSetting() }; var result = new PdfPartitionerResult(Guid.NewGuid(), pdfPartitionerRequest); var response = new Response { ResponsePayload = JsonConvert.SerializeObject(result) }; _mockPdfPartitionerRunInfoService.Setup(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny())).ThrowsAsync(new Exception("Error")); Assert.ThrowsAsync(async () => await _pdfPartitionerCompletionService.HandlePdfPartitionerCompletion(response)); _mockPdfPartitionerRunInfoService.Verify(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny()), Times.Once); _mockPdfPartitionerLogService.Verify(x => x.SaveListAsync(It.IsAny(), It.IsAny>()), Times.Never); _mockPdfPartitionerLogService.Verify(x => x.GetByPdfPartitionerRunInfoIdAsync(It.IsAny()), Times.Never); } [Test] public void HandlePdfPartitionerCompletion_ServiceException_PdfPartitionerLogService_SaveListAsync_ThrowException() { var pdfPartitionerRequest = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement, DynamicIndexFileName = "TestDynamicIndexFileName.txt", DynamicPdfName = "TestDynamicPdfname", DynamicPdfSettings = new DynamicNameSetting() }; var result = new PdfPartitionerResult(Guid.NewGuid(), pdfPartitionerRequest); var response = new Response { ResponsePayload = JsonConvert.SerializeObject(result) }; var pdfPartitionerRunInfo = new PdfPartitionerRunInfo { PdfPartitionerRunInfoId = result.PdfPartitionerRunInfoId, IndexTotal = 3, SuccessCount = 1, FailureCount = 1 }; _mockPdfPartitionerRunInfoService.Setup(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockPdfPartitionerLogService.Setup(x => x.SaveListAsync(It.IsAny(), It.IsAny>())).ThrowsAsync(new Exception("Error")); Assert.ThrowsAsync(async () => await _pdfPartitionerCompletionService.HandlePdfPartitionerCompletion(response)); _mockPdfPartitionerRunInfoService.Verify(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny()), Times.Once); _mockPdfPartitionerLogService.Verify(x => x.SaveListAsync(It.IsAny(), It.IsAny>()), Times.Once); _mockPdfPartitionerLogService.Verify(x => x.GetByPdfPartitionerRunInfoIdAsync(It.IsAny()), Times.Never); } [Test] public void HandlePdfPartitionerCompletion_ServiceException_PdfPartitionerLogService_GetByPdfPartitionerRunInfoIdAsync_ThrowException() { var pdfPartitionerRequest = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement, DynamicIndexFileName = "TestDynamicIndexFileName.txt", DynamicPdfName = "TestDynamicPdfname", DynamicPdfSettings = new DynamicNameSetting() }; var result = new PdfPartitionerResult(Guid.NewGuid(), pdfPartitionerRequest); var response = new Response { ResponsePayload = JsonConvert.SerializeObject(result) }; var pdfPartitionerRunInfo = new PdfPartitionerRunInfo { PdfPartitionerRunInfoId = result.PdfPartitionerRunInfoId, IndexTotal = 3, SuccessCount = 2, FailureCount = 1 }; _mockPdfPartitionerRunInfoService.Setup(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockPdfPartitionerLogService.Setup(x => x.SaveListAsync(It.IsAny(), It.IsAny>())); _mockPdfPartitionerLogService.Setup(x => x.GetByPdfPartitionerRunInfoIdAsync(It.IsAny())).ThrowsAsync(new Exception("Error")); Assert.ThrowsAsync(async () => await _pdfPartitionerCompletionService.HandlePdfPartitionerCompletion(response)); _mockPdfPartitionerRunInfoService.Verify(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny()), Times.Once); _mockPdfPartitionerLogService.Verify(x => x.SaveListAsync(It.IsAny(), It.IsAny>()), Times.Once); _mockPdfPartitionerLogService.Verify(x => x.GetByPdfPartitionerRunInfoIdAsync(It.IsAny()), Times.Once); } [Test] public async Task HandlePdfPartitionerCompletion_Success() { var pdfPartitionerRequest = new PdfPartitionerRequest { RootBasePath = "\\\\Tester\\path", ParentDynamicDirectory = "TestParentDynamicDirectory", PdfParserType = PdfParserTypes.FosLoanStatement, DynamicIndexFileName = "TestDynamicIndexFileName.txt", DynamicPdfName = "TestDynamicPdfname", DynamicPdfSettings = new DynamicNameSetting() }; var result = new PdfPartitionerResult(Guid.NewGuid(), pdfPartitionerRequest); result.FailedToQueueToParse = false; var response = new Response { ResponsePayload = JsonConvert.SerializeObject(result), ResponseStack = new List { "Test ResponseStack" } }; var pdfPartitionerRunInfo = new PdfPartitionerRunInfo { PdfPartitionerRunInfoId = result.PdfPartitionerRunInfoId, IndexTotal = 3, SuccessCount = 2, FailureCount = 1 }; _mockPdfPartitionerRunInfoService.Setup(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny())).ReturnsAsync(pdfPartitionerRunInfo); _mockPdfPartitionerLogService.Setup(x => x.SaveListAsync(It.IsAny(), It.IsAny>())); await _pdfPartitionerCompletionService.HandlePdfPartitionerCompletion(response); _mockPdfPartitionerRunInfoService.Verify(x => x.IncreaseCountsAndUpdate(It.IsAny(), It.IsAny()), Times.Once); _mockPdfPartitionerLogService.Verify(x => x.SaveListAsync(It.IsAny(), It.IsAny>()), Times.Once); _mockPdfPartitionerLogService.Verify(x => x.GetByPdfPartitionerRunInfoIdAsync(It.IsAny()), Times.Once); } }