using Moq; using NUnit.Framework; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using LCU.Api.Internal.DataCleanUp.Configuration; using LCU.Api.Internal.DataCleanUp.Models; using LCU.Api.Internal.DataCleanUp.Services; using LCU.Api.Internal.DataCleanUp.Services.Emailers; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Accounts; using LCU.Library.Internal.DataCleanUpModel.Models; namespace LCU.Api.Internal.DataCleanUpTest.Services; public class UpdateFannieMaeMortgageServiceTest { private UpdateFannieMaeMortgageService _updateFannieMaeMortgageService; private Mock _mockCoreApiWrapperService; private Mock _mockFileOperationsService; private FannieMaeConfiguration _fannieMaeConfiguration; private DataCleanUpConfiguration _dataCleanUpConfiguration; private Mock _mockEmailService; [SetUp] public void Setup() { _dataCleanUpConfiguration = new DataCleanUpConfiguration() { TimeZone = "America/Chicago" }; _fannieMaeConfiguration = new FannieMaeConfiguration() { ErrorFileDefaultName = "FannieMaeErrorRecord", SummaryEmailSubject = "FannieMaeSummaryEmail", PoolDateUserFieldId = "PLDT", PoolNbrUserFieldId = "PLNB", FileDateFormat = "M/d/yyyy", DnaDateFormat = "yyyy-MM-dd" }; _mockCoreApiWrapperService = new Mock(); _mockFileOperationsService = new Mock(); _mockEmailService = new Mock(); _updateFannieMaeMortgageService = new UpdateFannieMaeMortgageService(_mockCoreApiWrapperService.Object, _mockFileOperationsService.Object, _fannieMaeConfiguration, _dataCleanUpConfiguration, _mockEmailService.Object); } [Test] public async Task ProcessFannieMaeRecordPoolDate_Ok() { var request = new FannieMaeMortgageRequest() { Filename = "TestFile" }; var updateResult = new FannieMaeUpdateResult(request.Filename); var fannieMaeList = new List(); var fannieMaeMortgage1 = new FannieMaeMortgage() { FannieMaeLoanNumber = 1, ServicerLoanNumber = 99998888888800000, PoolIssueDate = "6/1/2023" }; fannieMaeList.Add(fannieMaeMortgage1); updateResult.UpdateList = fannieMaeList; var accountUserValuesList = new List() { new AccountUserField() { AccountNumber = 99998888888800000, Value = "6/1/2023", UserFieldCode = _fannieMaeConfiguration.PoolDateUserFieldId } }; _mockCoreApiWrapperService.Setup(x => x.AddAccountUserField(It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync(accountUserValuesList).Verifiable(); var result = await _updateFannieMaeMortgageService.ProcessFannieMaeRecord(fannieMaeMortgage1, updateResult, _fannieMaeConfiguration.PoolDateUserFieldId, fannieMaeMortgage1.PoolIssueDate); Assert.AreEqual(0, result.ErrorList.Count()); Assert.AreEqual(2, result.UpdateList.Count()); Assert.AreEqual(fannieMaeMortgage1.ServicerLoanNumber, accountUserValuesList[0].AccountNumber); } [Test] public void ProcessFannieMaeRecordForPoolDate_Error() { var request = new FannieMaeMortgageRequest() { Filename = "TestFile" }; var updateResult = new FannieMaeUpdateResult(request.Filename); var fannieMaeList = new List(); var fannieMaeMortgage1 = new FannieMaeMortgage() { FannieMaeLoanNumber = 1, ServicerLoanNumber = 99998877778800000, PoolIssueDate = "6/1/2023" }; fannieMaeList.Add(fannieMaeMortgage1); updateResult.UpdateList = fannieMaeList; var result = _updateFannieMaeMortgageService.ProcessFannieMaeRecord(fannieMaeMortgage1, updateResult, _fannieMaeConfiguration.PoolDateUserFieldId, fannieMaeMortgage1.PoolIssueDate); Assert.AreEqual(1, result.Result.ErrorList.Count()); Assert.AreEqual("Fannie Mae Loan Record Failed: 99998877778800000", result.Result.ErrorList[0]); } [Test] public async Task ProcessFannieMaeRecordPoolNumber_Ok() { var request = new FannieMaeMortgageRequest() { Filename = "TestFile" }; var updateResult = new FannieMaeUpdateResult(request.Filename); var fannieMaeList = new List(); var fannieMaeMortgage1 = new FannieMaeMortgage() { FannieMaeLoanNumber = 1, ServicerLoanNumber = 99998888888800000, PoolNumber = "TEST1234" }; fannieMaeList.Add(fannieMaeMortgage1); updateResult.UpdateList = fannieMaeList; var accountUserValuesList = new List() { new AccountUserField() { AccountNumber = 99998888888800000, Value = "TEST1234", UserFieldCode = _fannieMaeConfiguration.PoolNbrUserFieldId } }; _mockCoreApiWrapperService.Setup(x => x.AddAccountUserField(It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync(accountUserValuesList).Verifiable(); var result = await _updateFannieMaeMortgageService.ProcessFannieMaeRecord(fannieMaeMortgage1, updateResult, _fannieMaeConfiguration.PoolNbrUserFieldId, fannieMaeMortgage1.PoolNumber); Assert.AreEqual(0, result.ErrorList.Count()); Assert.AreEqual(2, result.UpdateList.Count()); Assert.AreEqual(fannieMaeMortgage1.ServicerLoanNumber, accountUserValuesList[0].AccountNumber); } [Test] public void ProcessFannieMaeRecordForPoolNumber_Error() { var request = new FannieMaeMortgageRequest() { Filename = "TestFile" }; var updateResult = new FannieMaeUpdateResult(request.Filename); var fannieMaeList = new List(); var fannieMaeMortgage1 = new FannieMaeMortgage() { FannieMaeLoanNumber = 1288, ServicerLoanNumber = 99998566800000, PoolNumber = "TEST1234" }; fannieMaeList.Add(fannieMaeMortgage1); updateResult.UpdateList = fannieMaeList; var result = _updateFannieMaeMortgageService.ProcessFannieMaeRecord(fannieMaeMortgage1, updateResult, _fannieMaeConfiguration.PoolNbrUserFieldId, fannieMaeMortgage1.PoolNumber); Assert.AreEqual(1, result.Result.ErrorList.Count()); Assert.AreEqual("Fannie Mae Loan Record Failed: 99998566800000", result.Result.ErrorList[0]); } [Test] public void BuildTotalBatchSummary_Ok_UpdatesErrors() { var request = new FannieMaeMortgageRequest() { Filename = "TestFile" }; var updateResults = new List(); var resultOne = new FannieMaeUpdateResult(request.Filename); var errorListOne = new List() { "errorOne", "errorTwo", "errorThree" }; var fannieMaeList = new List(); var fannieMaeMortgage1 = new FannieMaeMortgage() { FannieMaeLoanNumber = 1, PoolIssueDate = "6/1/2023", PoolNumber = "XXXZ23443" }; var fannieMaeMortgage2 = new FannieMaeMortgage() { FannieMaeLoanNumber = 2, PoolIssueDate = "6/1/2023", PoolNumber = "DDDZ23443" }; fannieMaeList.Add(fannieMaeMortgage1); fannieMaeList.Add(fannieMaeMortgage2); resultOne.ErrorList = errorListOne; resultOne.UpdateList = fannieMaeList; resultOne.TotalRecordsFound = 5; updateResults.Add(resultOne); var result = _updateFannieMaeMortgageService.BuildTotalBatchSummary(updateResults, true); Assert.AreEqual(5, result.TotalRecordsFound); Assert.AreEqual(3, result.TotalErrorRecords); Assert.AreEqual(true, result.ErrorFileCreated); Assert.AreEqual(2, result.TotalRecordsUpdated); } [Test] public void BuildTotalBatchSummary_Ok_UpdatesNoErrors() { var request = new FannieMaeMortgageRequest() { Filename = "TestFile" }; var updateResults = new List(); var resultOne = new FannieMaeUpdateResult(request.Filename); var errorListOne = new List() { }; var fannieMaeList = new List(); var fannieMaeMortgage1 = new FannieMaeMortgage() { FannieMaeLoanNumber = 1, PoolIssueDate = "6/1/2023", PoolNumber = "XXXZ23443" }; var fannieMaeMortgage2 = new FannieMaeMortgage() { FannieMaeLoanNumber = 2, PoolIssueDate = "6/1/2023", PoolNumber = "DDDZ23443" }; fannieMaeList.Add(fannieMaeMortgage1); fannieMaeList.Add(fannieMaeMortgage2); resultOne.ErrorList = errorListOne; resultOne.UpdateList = fannieMaeList; resultOne.TotalRecordsFound = 2; updateResults.Add(resultOne); var result = _updateFannieMaeMortgageService.BuildTotalBatchSummary(updateResults, false); Assert.AreEqual(2, result.TotalRecordsFound); Assert.AreEqual(0, result.TotalErrorRecords); Assert.AreEqual(false, result.ErrorFileCreated); Assert.AreEqual(2, result.TotalRecordsUpdated); } [Test] public void BuildTotalBatchSummary_Ok_NoUpdatesNoErrors() { var request = new FannieMaeMortgageRequest() { Filename = "TestFile" }; var updateResults = new List(); var resultOne = new FannieMaeUpdateResult(request.Filename); var errorListOne = new List() { }; var fannieMaeList = new List(); resultOne.ErrorList = errorListOne; resultOne.UpdateList = fannieMaeList; resultOne.TotalRecordsFound = 0; updateResults.Add(resultOne); var result = _updateFannieMaeMortgageService.BuildTotalBatchSummary(updateResults, false); Assert.AreEqual(0, result.TotalRecordsFound); Assert.AreEqual(0, result.TotalErrorRecords); Assert.AreEqual(false, result.ErrorFileCreated); Assert.AreEqual(0, result.TotalRecordsUpdated); } [Test] public void AddStringToErrorList_Ok() { var request = new FannieMaeMortgageRequest() { Filename = "TestFile" }; var updateResult = new FannieMaeUpdateResult(request.Filename); updateResult.ErrorList = new List(); var fannieMaeRecord = new FannieMaeMortgage() { ServicerLoanNumber = 1, PoolIssueDate = "6/1/2023", PoolNumber = "TEST1234" }; var expectedError = "1|TEST1234|6/1/2023|Unit test error message\n"; updateResult.AddStringToErrorList(fannieMaeRecord, "Unit test error message"); Assert.AreEqual(1, updateResult.ErrorList.Count); Assert.AreEqual(expectedError, updateResult.ErrorList.FirstOrDefault()); } }