Files
monorepo/LCU.API.Internal.DocumentIngestor/LCU.API.Internal.DocumentIngestorTests/Services/IngestionOperationServices/BatchIngestionServiceTest.cs
T
2026-03-25 14:50:13 -05:00

174 lines
8.2 KiB
C#

using System;
using Moq;
using NUnit.Framework;
using LCU.Library.Internal.DocumentIngestorModels.Models;
using LCU.API.Internal.DocumentIngestor.Services.IngestionOperationServices;
using LCU.Api.Internal.DispatcherSharedLib.Utilities;
using LCU.API.Internal.DocumentIngestor.Services.MicroApiServices;
using LCU.API.Internal.DocumentIngestor.Configurations;
using LCU.Library.Internal.DispatcherModels.Models;
using LCU.Library.Internal.Exceptions;
using System.Collections.Generic;
using System.Threading.Tasks;
using LCU.Library.Internal.DispatcherModels.Entities;
using LCU.Library.Internal.DocumentIngestorModels.Enums;
using LCU.Api.Internal.DispatcherSharedLib.BuilderServices;
using LCU.Library.Internal.DispatcherModels.Enums;
using LCU.Library.Internal.FileOperationsModels.Models;
namespace LCU.API.Internal.DocumentIngestorTests.Services.IngestionOperationServices;
public class BatchIngestionServiceTest
{
private BatchIngestionService _batchIngestionService;
private ApiConfiguration _apiConfiguration;
private DispatcherJobCreationConfiguration _dispatcherJobCreationConfiguration;
private Mock<IFileOperationsApiService> _mockFileOperationsApiService;
private Mock<IRequestBuilderService> _mockDispatcherRequestBuilder;
[SetUp]
public void Setup()
{
_apiConfiguration = new ApiConfiguration
{
TimeZone = "America/Chicago"
};
_dispatcherJobCreationConfiguration = new DispatcherJobCreationConfiguration
{
DocumentIngestorDispatcherErrorRecipients = new List<string>
{
"[email protected]"
},
JobTags = new List<JobTag>
{
new JobTag
{
JobTagId = 0,
JobId = 0,
TagId = 1
}
}
};
_mockFileOperationsApiService = new Mock<IFileOperationsApiService>();
_mockDispatcherRequestBuilder = new Mock<IRequestBuilderService>();
_batchIngestionService = new BatchIngestionService
(
_apiConfiguration,
_dispatcherJobCreationConfiguration,
_mockFileOperationsApiService.Object,
_mockDispatcherRequestBuilder.Object
);
}
[Test]
public void HandleBatchIngestion_ArgumentNullException_RequestNull()
{
BatchIngestionRequest request = null;
Assert.ThrowsAsync<ArgumentNullException>(async () => await _batchIngestionService.HandleBatchIngestion(request));
_mockDispatcherRequestBuilder.Verify(x => x.CreateJob(It.IsAny<JobDetails>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Never);
_mockDispatcherRequestBuilder.Verify(x => x.AddWorkItem(It.IsAny<CreateDirectoryRequest>(), It.IsAny<WorkItemDetails>(), ActionType.CreateDirectory), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockDispatcherRequestBuilder.Verify(x => x.AddWorkItem(It.IsAny<IngestorRequest>(), It.IsAny<WorkItemDetails>(), ActionType.DocumentIngestor), Times.Never);
_mockDispatcherRequestBuilder.Verify(x => x.SendDispatcherRequest(null), Times.Never);
}
[Test]
public void HandleBatchIngestion_ServiceException_BuildDynamicDirectoryList_ThrowsException()
{
var request = new BatchIngestionRequest
{
RootBasePath = "\\\\Tester\\path",
ParentDynamicDirectory = "TestParentDynamicDirectory",
IngestorType = IngestorTypes.FosTaxStatement
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ThrowsAsync(new Exception("Error"));
Assert.ThrowsAsync<ServiceException>(async () => await _batchIngestionService.HandleBatchIngestion(request));
_mockDispatcherRequestBuilder.Verify(x => x.CreateJob(It.IsAny<JobDetails>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockDispatcherRequestBuilder.Verify(x => x.AddWorkItem(It.IsAny<CreateDirectoryRequest>(), It.IsAny<WorkItemDetails>(), ActionType.CreateDirectory), Times.Never);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()), Times.Never);
_mockDispatcherRequestBuilder.Verify(x => x.AddWorkItem(It.IsAny<IngestorRequest>(), It.IsAny<WorkItemDetails>(), ActionType.DocumentIngestor), Times.Never);
_mockDispatcherRequestBuilder.Verify(x => x.SendDispatcherRequest(null), Times.Never);
}
[Test]
public async Task HandleBatchIngestion_BuildDynamicFileList_ThrowsException()
{
var request = new BatchIngestionRequest
{
RootBasePath = "\\\\Tester\\path",
ParentDynamicDirectory = "TestParentDynamicDirectory",
IngestorType = IngestorTypes.FosTaxStatement
};
var dynamicDirectoryListResult = new List<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
_mockDispatcherRequestBuilder.Setup(x => x.CreateJob(It.IsAny<JobDetails>()));
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>())).ThrowsAsync(new Exception("Error"));
await _batchIngestionService.HandleBatchIngestion(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockDispatcherRequestBuilder.Verify(x => x.CreateJob(It.IsAny<JobDetails>()), Times.Exactly(2));
_mockDispatcherRequestBuilder.Verify(x => x.AddWorkItem(It.IsAny<CreateDirectoryRequest>(), It.IsAny<WorkItemDetails>(), ActionType.CreateDirectory), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockDispatcherRequestBuilder.Verify(x => x.AddWorkItem(It.IsAny<IngestorRequest>(), It.IsAny<WorkItemDetails>(), ActionType.DocumentIngestor), Times.Never);
_mockDispatcherRequestBuilder.Verify(x => x.SendDispatcherRequest(null), Times.Never);
}
[Test]
public async Task HandleBatchIngestion_Success()
{
var request = new BatchIngestionRequest
{
RootBasePath = "\\\\Tester\\path",
ParentDynamicDirectory = "TestParentDynamicDirectory",
DynamicIndexFileName = "TestIndexFile",
IngestorType = IngestorTypes.FosTaxStatement,
IngestionDate = Convert.ToDateTime("1/1/2022")
};
var dynamicDirectoryListResult = new List<string>
{
"TestParentDynamicDirectory1",
"TestParentDynamicDirectory2"
};
_mockFileOperationsApiService.Setup(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>())).ReturnsAsync(dynamicDirectoryListResult);
_mockDispatcherRequestBuilder.Setup(x => x.CreateJob(It.IsAny<JobDetails>()));
var dynamicFileListRequest1 = new DynamicFileListRequest
{
Path = "\\\\Tester\\path\\01012022\\TestParentDynamicDirectory1\\",
Filename = "TestIndexFile",
DynamicFileSettings = null
};
var dynamicFileResult1 = "TestIndexFile1";
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(x => x.Path == dynamicFileListRequest1.Path))).ReturnsAsync(dynamicFileResult1);
var dynamicFileListRequest2 = new DynamicFileListRequest
{
Path = "\\\\Tester\\path\\01012022\\TestParentDynamicDirectory2\\",
Filename = "TestIndexFile",
DynamicFileSettings = null
};
var dynamicFileResult2 = "TestIndexFile2";
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFile(It.Is<DynamicFileListRequest>(x => x.Path == dynamicFileListRequest2.Path))).ReturnsAsync(dynamicFileResult2);
await _batchIngestionService.HandleBatchIngestion(request);
_mockFileOperationsApiService.Verify(x => x.BuildDynamicDirectoryList(It.IsAny<DynamicDirectoryListRequest>()), Times.Once);
_mockDispatcherRequestBuilder.Verify(x => x.CreateJob(It.IsAny<JobDetails>()), Times.Exactly(2));
_mockDispatcherRequestBuilder.Verify(x => x.AddWorkItem(It.IsAny<CreateDirectoryRequest>(), It.IsAny<WorkItemDetails>(), ActionType.CreateDirectory), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.BuildDynamicFile(It.IsAny<DynamicFileListRequest>()), Times.Exactly(2));
_mockDispatcherRequestBuilder.Verify(x => x.AddWorkItem(It.IsAny<IngestorRequest>(), It.IsAny<WorkItemDetails>(), ActionType.DocumentIngestor), Times.Exactly(2));
_mockDispatcherRequestBuilder.Verify(x => x.SendDispatcherRequest(null), Times.Exactly(2));
}
}