Files
2026-03-13 09:28:55 -05:00

338 lines
12 KiB
C#

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<ICoreApiWrapperService> _mockCoreApiWrapperService;
private Mock<IFileOperationsService> _mockFileOperationsService;
private FannieMaeConfiguration _fannieMaeConfiguration;
private DataCleanUpConfiguration _dataCleanUpConfiguration;
private Mock<INotificationsApiService> _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<ICoreApiWrapperService>();
_mockFileOperationsService = new Mock<IFileOperationsService>();
_mockEmailService = new Mock<INotificationsApiService>();
_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<FannieMaeMortgage>();
var fannieMaeMortgage1 = new FannieMaeMortgage()
{
FannieMaeLoanNumber = 1,
ServicerLoanNumber = 99998888888800000,
PoolIssueDate = "6/1/2023"
};
fannieMaeList.Add(fannieMaeMortgage1);
updateResult.UpdateList = fannieMaeList;
var accountUserValuesList = new List<AccountUserField>()
{
new AccountUserField()
{
AccountNumber = 99998888888800000,
Value = "6/1/2023",
UserFieldCode = _fannieMaeConfiguration.PoolDateUserFieldId
}
};
_mockCoreApiWrapperService.Setup(x => x.AddAccountUserField(It.IsAny<long>(), It.IsAny<string>(), It.IsAny<string>()))
.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<FannieMaeMortgage>();
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<FannieMaeMortgage>();
var fannieMaeMortgage1 = new FannieMaeMortgage()
{
FannieMaeLoanNumber = 1,
ServicerLoanNumber = 99998888888800000,
PoolNumber = "TEST1234"
};
fannieMaeList.Add(fannieMaeMortgage1);
updateResult.UpdateList = fannieMaeList;
var accountUserValuesList = new List<AccountUserField>()
{
new AccountUserField()
{
AccountNumber = 99998888888800000,
Value = "TEST1234",
UserFieldCode = _fannieMaeConfiguration.PoolNbrUserFieldId
}
};
_mockCoreApiWrapperService.Setup(x => x.AddAccountUserField(It.IsAny<long>(), It.IsAny<string>(), It.IsAny<string>()))
.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<FannieMaeMortgage>();
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<FannieMaeUpdateResult>();
var resultOne = new FannieMaeUpdateResult(request.Filename);
var errorListOne = new List<string>()
{
"errorOne",
"errorTwo",
"errorThree"
};
var fannieMaeList = new List<FannieMaeMortgage>();
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<FannieMaeUpdateResult>();
var resultOne = new FannieMaeUpdateResult(request.Filename);
var errorListOne = new List<string>()
{
};
var fannieMaeList = new List<FannieMaeMortgage>();
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<FannieMaeUpdateResult>();
var resultOne = new FannieMaeUpdateResult(request.Filename);
var errorListOne = new List<string>()
{
};
var fannieMaeList = new List<FannieMaeMortgage>();
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<string>();
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());
}
}