using System; using System.Collections.Generic; using System.Threading.Tasks; using LCU.API.Internal.DocumentIngestor.Services.AttributeDeterminingServices; using LCU.API.Internal.DocumentIngestor.Services.DocumentProcessorServices; using LCU.API.Internal.DocumentIngestor.Services.MicroApiServices; using LCU.Library.DocumentType.Enums; using LCU.Library.DocumentType.Models.Requests.Account; using LCU.Library.DocumentType.Models.Requests.Attributes; using LCU.Library.Internal.DocumentIngestorModels.Entities; using LCU.Library.Internal.DocumentIngestorModels.Enums; using LCU.Library.Internal.DocumentIngestorModels.Models; using LCU.Library.Internal.DocumentIngestorModels.Models.IndexFileDocuments; using LCU.Library.Internal.LCUServiceFactory.Configurations; using Moq; using Newtonsoft.Json; using NUnit.Framework; namespace LCU.API.Internal.DocumentIngestorTests.Services.DocumentProcessorServices; public class OsgDnaNoticesProcessingServiceTest { private OsgDnaNoticesProcessingService _osgDnaNoticesProcessingService; private Mock _mockAccountOwnerDeterminingService; private Mock _mockFileOperationsApiService; private Mock _mockDocumentTypeUploaderApiService; private Mock _mockPrimaryOwnerDeterminingService; [SetUp] public void Setup() { _mockAccountOwnerDeterminingService = new Mock(); _mockPrimaryOwnerDeterminingService = new Mock(); _mockFileOperationsApiService = new Mock(); _mockDocumentTypeUploaderApiService = new Mock(); var serviceFactoryConfiguration = new ServicesFactoryConfiguration { ServiceFactoryRegistrations = new List { new() { ServiceInterfaceName = "IIndexParserService", ServiceRegistrations = new List { new() { ServiceName = "IndexParserService", ServiceId = "4" }, new() { ServiceName = "IndexParserService", ServiceId = "1" } } } } }; _osgDnaNoticesProcessingService = new OsgDnaNoticesProcessingService(_mockPrimaryOwnerDeterminingService.Object, _mockFileOperationsApiService.Object, _mockDocumentTypeUploaderApiService.Object, _mockAccountOwnerDeterminingService.Object, serviceFactoryConfiguration); } [Test] public async Task ProcessRequest_ProcessingRequest_Null_ProcessResult_Failure() { ProcessingRequest request = null; var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsFalse(result.Success); Assert.IsFalse(result.EntityIsUnknown); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Never ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); } [Test] public async Task ProcessRequest_OsgDnaNotices_Null_ProcessResult_Failure() { var request = new ProcessingRequest { DocumentValuePayload = null }; var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsFalse(result.Success); Assert.IsFalse(result.EntityIsUnknown); _mockAccountOwnerDeterminingService.Verify( x => x.DetermineAccountOwnerAttribute(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Never ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); } [Test] public async Task ProcessRequest_OsgDnaNotices_OneValidationFailures_Failure() { var OsgDnaNotices = new OsgDnaNoticesDocument { DocType = "MTG_NT_110_01", AccountNumber = "1", MemberNumberOrUserId = "2", CreationDate = "2", StartingPage = "1", NumberOfPages = "3" }; var request = new ProcessingRequest { DocumentValuePayload = JsonConvert.SerializeObject(OsgDnaNotices) }; var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsFalse(result.Success); Assert.IsNull(result.EntityIsUnknown); Assert.AreEqual(result.ProcessStatusType, ProcessStatusTypes.DataMappingFailure); Assert.AreEqual(1, result.MessageStack.Count); _mockAccountOwnerDeterminingService.Verify( x => x.DetermineAccountOwnerAttribute(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Never ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); } [Test] public async Task ProcessRequest_OsgDnaNotices_ValidationFailures_Failure() { var OsgDnaNotices = new OsgDnaNoticesDocument { DocType = "MTG_NT_110_01", AccountNumber = "0", MemberNumberOrUserId = "2", CreationDate = "20220823", StartingPage = "1", NumberOfPages = "3" }; var request = new ProcessingRequest { DocumentValuePayload = JsonConvert.SerializeObject(OsgDnaNotices) }; var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsFalse(result.Success); Assert.IsNull(result.EntityIsUnknown); Assert.AreEqual(result.ProcessStatusType, ProcessStatusTypes.DataMappingFailure); Assert.AreEqual(1, result.MessageStack.Count); _mockAccountOwnerDeterminingService.Verify( x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Never ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); } [Test] public async Task ProcessRequest_OsgDnaNotices_NumberIsNull_Failure() { var OsgDnaNotices = new OsgDnaNoticesDocument { DocType = "MTG_NT_110_01", AccountNumber = "1", MemberNumberOrUserId = "2", CreationDate = "20220823", StartingPage = "1", NumberOfPages = "3" }; var request = new ProcessingRequest { DocumentValuePayload = JsonConvert.SerializeObject(OsgDnaNotices) }; AccountAttribute attribute = null; var accountAttribute = ErrorCaptureResult.CreateSuccessPayload(attribute); _mockAccountOwnerDeterminingService.Setup(x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(accountAttribute); var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsFalse(result.Success); Assert.IsFalse(result.EntityIsUnknown); Assert.AreEqual(1, result.MessageStack.Count); _mockAccountOwnerDeterminingService.Verify( x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once ); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Never ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); } [Test] public async Task ProcessRequest_OsgDnaNotices_NumberNotNull_Upload_Success() { var OsgDnaNotices = new OsgDnaNoticesDocument { DocType = "MTG_NT_110_01", AccountNumber = "1", MemberNumberOrUserId = "2", CreationDate = "20220823", StartingPage = "1", NumberOfPages = "3" }; var request = new ProcessingRequest { DocumentValuePayload = JsonConvert.SerializeObject(OsgDnaNotices), IngestorRequest = new IngestorRequest { RootPath = "\\Tester\\" }, DocumentFileName = "test.pdf" }; var attribute = new AccountAttribute { PersonNumbers = new List { "2", "3", "4" } }; var accountAttribute = ErrorCaptureResult.CreateSuccessPayload(attribute); _mockAccountOwnerDeterminingService.Setup(x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(accountAttribute); byte[] content = new byte[1024]; _mockFileOperationsApiService.Setup(x => x.GetContentBytes(It.IsAny(), It.IsAny())) .ReturnsAsync(content); var documentTypeArchiveDeleteInfo = new DocumentTypeArchiveDeleteInfo { DocumentTypeName = "MTG_NT_110_01", ArchiveDays = 2000, DeleteDays = 4000 }; _mockDocumentTypeUploaderApiService.Setup(x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny())); var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsTrue(result.Success); Assert.IsNull(result.EntityIsUnknown); _mockAccountOwnerDeterminingService.Verify( x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once ); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Once ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.Is(request => request.AccountDocumentMetadata.Source == SourceTypes.OSG && request.AccountDocumentMetadata.DataSource == DataSourceTypes.DNA), It.IsAny(), It.IsAny()), Times.Once ); } [Test] public async Task ProcessRequest_OsgDnaNotices_NumberNotNull_GetContentBtyesThrowException_Failure() { var OsgDnaNotices = new OsgDnaNoticesDocument { DocType = "MTG_NT_110_01", AccountNumber = "1", MemberNumberOrUserId = "2", CreationDate = "20220823", StartingPage = "1", NumberOfPages = "3" }; var request = new ProcessingRequest { DocumentValuePayload = JsonConvert.SerializeObject(OsgDnaNotices), IngestorRequest = new IngestorRequest { RootPath = "\\Tester\\" }, DocumentFileName = "test.pdf" }; var attribute = new AccountAttribute { PersonNumbers = new List { "2", "3", "4" } }; var accountAttribute = ErrorCaptureResult.CreateSuccessPayload(attribute); _mockAccountOwnerDeterminingService.Setup(x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(accountAttribute); _mockFileOperationsApiService.Setup(x => x.GetContentBytes(It.IsAny(), It.IsAny())) .ThrowsAsync(new Exception("Error")); var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsFalse(result.Success); Assert.IsFalse(result.EntityIsUnknown); Assert.AreEqual(1, result.MessageStack.Count); _mockAccountOwnerDeterminingService.Verify( x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once ); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Once ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); } [Test] public async Task ProcessRequest_OsgDnaNotices_NumberNotNull_UploadDocumentThrowException_Failure() { var OsgDnaNotices = new OsgDnaNoticesDocument { DocType = "MTG_NT_110_01", AccountNumber = "1", MemberNumberOrUserId = "2", CreationDate = "20220823", StartingPage = "1", NumberOfPages = "3" }; var request = new ProcessingRequest { DocumentValuePayload = JsonConvert.SerializeObject(OsgDnaNotices), IngestorRequest = new IngestorRequest { RootPath = "\\Tester\\" }, DocumentFileName = "test.pdf" }; var attribute = new AccountAttribute { PersonNumbers = new List { "2", "3", "4" } }; var accountAttribute = ErrorCaptureResult.CreateSuccessPayload(attribute); _mockAccountOwnerDeterminingService.Setup(x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(accountAttribute); byte[] content = new byte[1024]; _mockFileOperationsApiService.Setup(x => x.GetContentBytes(It.IsAny(), It.IsAny())) .ReturnsAsync(content); _mockDocumentTypeUploaderApiService.Setup(x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny())) .ThrowsAsync(new Exception("Error")); var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsFalse(result.Success); Assert.IsFalse(result.EntityIsUnknown); Assert.AreEqual(1, result.MessageStack.Count); _mockAccountOwnerDeterminingService.Verify( x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Once ); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Once ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once ); } [Test] public async Task ProcessRequest_OsgDnaNotices_GetValueFromName_ExceptionThrown_Failure() { var OsgDnaNotices = new OsgDnaNoticesDocument { DocType = Guid.NewGuid().ToString(), AccountNumber = "1", MemberNumberOrUserId = "2", CreationDate = "20220823", StartingPage = "1", NumberOfPages = "3" }; var request = new ProcessingRequest { DocumentValuePayload = JsonConvert.SerializeObject(OsgDnaNotices), IngestorRequest = new IngestorRequest { RootPath = "\\Tester\\" }, DocumentFileName = "test.pdf" }; var attribute = new AccountAttribute { PersonNumbers = new List { "2", "3", "4" } }; var accountAttribute = ErrorCaptureResult.CreateSuccessPayload(attribute); _mockAccountOwnerDeterminingService.Setup(x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(accountAttribute); byte[] content = new byte[1024]; _mockFileOperationsApiService.Setup(x => x.GetContentBytes(It.IsAny(), It.IsAny())) .ReturnsAsync(content); var result = await _osgDnaNoticesProcessingService.ProcessRequest(request); Assert.IsFalse(result.Success); Assert.IsFalse(result.EntityIsUnknown); Assert.AreEqual(1, result.MessageStack.Count); _mockAccountOwnerDeterminingService.Verify( x => x.DetermineAccountOwnerAttributeByMemberNumberOrUserId(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); _mockFileOperationsApiService.Verify( x => x.GetContentBytes(It.IsAny(), It.IsAny()), Times.Never ); _mockDocumentTypeUploaderApiService.Verify( x => x.UploadAccountDocument(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never ); } }