using System; using System.IO; using System.Collections.Generic; using System.Threading.Tasks; using Moq; using NUnit.Framework; using LCU.Library.Internal.DocumentIngestorModels.Models; using LCU.API.Internal.DocumentIngestor.Services.IngestionOperationServices; using LCU.API.Internal.DocumentIngestor.Services.MicroApiServices; using LCU.Library.Internal.Exceptions; using LCU.API.Internal.DocumentIngestor.Services; using LCU.API.Internal.DocumentIngestor.Configurations; using LCU.Library.Internal.FileOperationsModels.Models; namespace LCU.API.Internal.DocumentIngestorTests.Services.IngestionOperationServices; public class OsgPreprocessorServiceTest { private OsgPreprocessorService _osgPreprocessorService; private Mock _mockFileOperationsApiService; private Mock _mockOsgPreprocessorInfoService; private ApiConfiguration _apiConfiguration; [SetUp] public void Setup() { _mockFileOperationsApiService = new Mock(); _mockOsgPreprocessorInfoService = new Mock(); _apiConfiguration = new ApiConfiguration() { TimeZone = "America/Chicago" }; _osgPreprocessorService = new OsgPreprocessorService(_mockFileOperationsApiService.Object, _mockOsgPreprocessorInfoService.Object, _apiConfiguration); } public OsgPreprocessorRequest BuildTestOsgPreprocessorRequest() { return new OsgPreprocessorRequest() { ArchiveStartDate = new DateTime(2020, 10, 1), SourceBasePath = @"\TEST\SourceBasePath", WorkingBasePath = Path.GetFullPath(@"..\..\..\TestContent"), OutputBasePath = @"\TEST\OutputBasePath", IncompleteOutputBasePath = @"\TEST\IncompleteOutputBasePath" }; } [Test] public async Task HandleOsgPreprocessing_Success() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var requestResponse = new RequestResponse() { IsSuccessful = true }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(false) .ReturnsAsync(false); _mockFileOperationsApiService.SetupSequence(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.Is(folderPath => folderPath.Contains(request.WorkingBasePath)), It.IsAny(), It.Is(targetDirectory => targetDirectory.Contains(request.WorkingBasePath)))).ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); await _osgPreprocessorService.HandleOsgPreprocessing(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(4)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public async Task HandleOsgPreprocessing_Failure_IndexFileDoesNotExist() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var indexFiles = new List() { }; var requestResponse = new RequestResponse() { IsSuccessful = true }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); await _osgPreprocessorService.HandleOsgPreprocessing(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public async Task HandleOsgPreprocessing_Failure_ParseReturnedNoRecords() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var indexFiles = new List() { "Test_OSG_Index_File_1099_MISC.XML" }; var requestResponse = new RequestResponse() { IsSuccessful = true }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.Is(folderPath => folderPath.Contains(request.WorkingBasePath)), It.IsAny(), It.Is(targetDirectory => targetDirectory.Contains(request.WorkingBasePath)))).ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse) .ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); await _osgPreprocessorService.HandleOsgPreprocessing(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(1)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public async Task HandleOsgPreprocessing_Failure_NoMatchingPdfsFound() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.3.PDF", "testPdf.4.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var requestResponse = new RequestResponse() { IsSuccessful = true }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(false) .ReturnsAsync(false); _mockFileOperationsApiService.Setup(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); _mockFileOperationsApiService.Setup(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(requestResponse); await _osgPreprocessorService.HandleOsgPreprocessing(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void HandleOsgPreprocessing_Failure_FailedToDeleteIndexFile() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseFailure); Assert.ThrowsAsync(async () => await _osgPreprocessorService.HandleOsgPreprocessing(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void HandleOsgPreprocessing_FailureToWriteInfoLog() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(false) .ReturnsAsync(false); _mockFileOperationsApiService.SetupSequence(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.Is(folderPath => folderPath.Contains(request.WorkingBasePath)), It.IsAny(), It.Is(targetDirectory => targetDirectory.Contains(request.WorkingBasePath)))).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseFailure); Assert.ThrowsAsync(async () => await _osgPreprocessorService.HandleOsgPreprocessing(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public async Task HandleOsgPreprocessing_WriteParsedRecordGroup_Failure_ParsedFileExists() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(true) .ReturnsAsync(false); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.Is(folderPath => folderPath.Contains(request.WorkingBasePath)), It.IsAny(), It.Is(targetDirectory => targetDirectory.Contains(request.WorkingBasePath)))).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); await _osgPreprocessorService.HandleOsgPreprocessing(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public async Task HandleOsgPreprocessing_WriteParsedRecordGroup_Failure_FailedToCreateDirectory() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(false) .ReturnsAsync(false); _mockFileOperationsApiService.SetupSequence(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny())).ReturnsAsync(responseFailure) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.Is(folderPath => folderPath.Contains(request.WorkingBasePath)), It.IsAny(), It.Is(targetDirectory => targetDirectory.Contains(request.WorkingBasePath)))).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); await _osgPreprocessorService.HandleOsgPreprocessing(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public async Task HandleOsgPreprocessing_WriteParsedRecordGroup_Failure_FailedToMovePdf() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(false) .ReturnsAsync(false); _mockFileOperationsApiService.SetupSequence(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseFailure) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); await _osgPreprocessorService.HandleOsgPreprocessing(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(4)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public async Task HandleOsgPreprocessing_WriteParsedRecordGroup_Failure_FailedToWriteIndexFile() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(false) .ReturnsAsync(false); _mockFileOperationsApiService.SetupSequence(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseFailure) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); await _osgPreprocessorService.HandleOsgPreprocessing(request); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(4)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void HandleOsgPreprocessing_PrepareZipFile_Failure_FailedToMoveZipFile() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseFailure); Assert.ThrowsAsync(async () => await _osgPreprocessorService.HandleOsgPreprocessing(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void HandleOsgPreprocessing_PrepareZipFile_Failure_FailedToUnzipZipFile() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseFailure); Assert.ThrowsAsync(async () => await _osgPreprocessorService.HandleOsgPreprocessing(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void HandleOsgPreprocessing_PrepareZipFile_Failure_FailedToDeleteZipFile() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseFailure); Assert.ThrowsAsync(async () => await _osgPreprocessorService.HandleOsgPreprocessing(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void HandleOsgPreprocessing_ZipAndMoveResults_Failure_FailedToZipFiles() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(request.SourceBasePath, allZipsInDirectory[0], request.WorkingBasePath)).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(false) .ReturnsAsync(false); _mockFileOperationsApiService.SetupSequence(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.Is(folderPath => folderPath.Contains(request.WorkingBasePath)), It.IsAny(), It.Is(targetDirectory => targetDirectory.Contains(request.WorkingBasePath)))).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseFailure); _mockFileOperationsApiService.Setup(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); Assert.ThrowsAsync(async () => await _osgPreprocessorService.HandleOsgPreprocessing(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(1)); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] public void HandleOsgPreprocessing_Failure_FailedToDeleteDirectory() { var request = BuildTestOsgPreprocessorRequest(); var allZipsInDirectory = new List() { "Test_OSG_Index_File.ZIP" }; var pdfList = new List() { "testPdf.1.PDF", "testPdf.2.PDF" }; var indexFiles = new List() { "Test_OSG_Index_File.XML" }; var responseSuccess = new RequestResponse() { IsSuccessful = true }; var responseFailure = new RequestResponse() { IsSuccessful = false }; _mockFileOperationsApiService.SetupSequence(x => x.BuildDynamicFileList(It.IsAny())).ReturnsAsync(allZipsInDirectory) .ReturnsAsync(indexFiles) .ReturnsAsync(pdfList); _mockFileOperationsApiService.SetupSequence(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteFile(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.ValidateFileExists(It.IsAny())).ReturnsAsync(false) .ReturnsAsync(false); _mockFileOperationsApiService.SetupSequence(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess) .ReturnsAsync(responseSuccess); _mockFileOperationsApiService.Setup(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseSuccess); _mockFileOperationsApiService.SetupSequence(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(responseFailure) .ReturnsAsync(responseFailure); Assert.ThrowsAsync(async () => await _osgPreprocessorService.HandleOsgPreprocessing(request)); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(4)); _mockFileOperationsApiService.Verify(x => x.DirectUnzipFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectDeleteFile(It.IsAny(), It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Exactly(2)); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); _mockFileOperationsApiService.Verify(x => x.DirectZipDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); _mockFileOperationsApiService.Verify(x => x.DirectDeleteDirectory(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] public void HandleOsgPreprocessing_ArgumentNullException_RequestNull() { OsgPreprocessorRequest request = null; Assert.ThrowsAsync(async () => await _osgPreprocessorService.HandleOsgPreprocessing(request)); _mockFileOperationsApiService.Verify(x => x.ValidateFileExists(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.BuildDynamicFileList(It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectCreateDirectory(It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectMoveFile(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); _mockFileOperationsApiService.Verify(x => x.DirectWriteFile(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } }