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

587 lines
21 KiB
C#

using LCU.Api.Internal.DataCleanUp.Configuration;
using LCU.Api.Internal.DataCleanUp.DataAccess;
using LCU.Api.Internal.DataCleanUp.Models.ParserModels;
using LCU.Api.Internal.DataCleanUp.Services;
using LCU.Api.Internal.DataCleanUp.Services.Emailers;
using LCU.Api.Internal.DataCleanUp.Services.Validation;
using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.PostalAddresses;
using Moq;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LCU.Api.Internal.DataCleanUpTest.Services;
public class UpdateNcoaProcessServiceTest
{
private UpdateNcoaProcessService _updateNcoaProcessService;
private Mock<ICoreApiWrapperService> _mockCoreApiWrapperService;
private Mock<IFileOperationsService> _mockFileOperationsService;
private NcoaConfiguration _ncoaConfiguration;
private DataCleanUpConfiguration _dataCleanUpConfiguration;
private INcoaValidationService _ncoaValidationService;
private Mock<INotificationsApiService> _mockEmailService;
[SetUp]
public void Setup()
{
_dataCleanUpConfiguration = new DataCleanUpConfiguration()
{
TimeZone = "America/Chicago"
};
_ncoaConfiguration = new NcoaConfiguration()
{
PrimaryAddressLabel = "PRI",
StreetTypeLabel = "ST",
UrlBase = "/Persons/{personNumber}/PostalAddresses/PRI",
UsaLabel = "USA",
PoBoxLabel = "PO BOX",
PoBoxAddressTypeLabel = "POBN",
ErrorFileDefaultName = "NCOAErrorRecord",
PersonNumberLabel = "{personNumber}"
};
_ncoaValidationService = new NcoaValidationService();
_mockCoreApiWrapperService = new Mock<ICoreApiWrapperService>();
_mockFileOperationsService = new Mock<IFileOperationsService>();
_mockEmailService = new Mock<INotificationsApiService>();
_updateNcoaProcessService = new UpdateNcoaProcessService(_mockCoreApiWrapperService.Object,
_mockFileOperationsService.Object, _ncoaConfiguration,
_dataCleanUpConfiguration, _ncoaValidationService,
_mockEmailService.Object);
}
[Test]
public async Task MapPersonAddressLine_NoPoBox()
{
//Arrange
var ncoaRecord = new NcoaRecord()
{
UserId = "123456",
NcoaType = "I",
ChangeDate = "202212",
PrimaryName = "Test E Testerson",
CurrentAddressOne = "1 Imaginary Lane",
CurrentAddressTwo = "Apt 13",
CurrentAddressThree = "Additional Address Line",
CurrentAddressFour = "ReallyLongCityName",
CurrentAddressFive = "Wisconsin, 53186",
SecondaryName = "Test Testerson",
BusinessName = "Testerson's Testing",
NewAddressLine = "New Address Line",
City = "New Test City",
StateCode = "WI",
ZipCode = "53022",
ZipSuffix = "-1234",
UserIdTwo = "123456",
StatementCode = "TestStatementCode"
};
var currentAddress = new PersonPostalAddress()
{
AddressNumber = 456
};
//Act
var result = _updateNcoaProcessService.MapPersonAddrLine(98765, currentAddress, ncoaRecord);
//Assert
Assert.AreEqual(98765, result.PersonNumber);
Assert.AreEqual("PRI", result.Id);
Assert.AreEqual("PRI", result.AddressUseCode);
Assert.AreEqual(456, result.AddressNumber);
Assert.AreEqual("New Address Line", result.AddressLine1);
Assert.AreEqual("ST", result.AddressLineTypeCode1);
Assert.Null(result.AddressLine2);
Assert.Null(result.AddressLineTypeCode2);
Assert.Null(result.AddressLine3);
Assert.Null(result.AddressLineTypeCode3);
Assert.AreEqual("New Test City", result.CityName);
Assert.AreEqual("WI", result.CountrySubdivisionCode);
Assert.AreEqual("53022", result.PostalCode);
Assert.AreEqual("1234", result.ZipPlus);
Assert.AreEqual("USA", result.CountryCode);
Assert.AreEqual("/Persons/98765/PostalAddresses/PRI", result.Url);
Assert.False(result.IsPerformIRSCorrection);
}
[Test]
public async Task MapPersonAddressLine_PoBox()
{
//Arrange
var ncoaRecord = new NcoaRecord()
{
UserId = "123456",
NcoaType = "I",
ChangeDate = "202212",
PrimaryName = "Test E Testerson",
CurrentAddressOne = "1 Imaginary Lane",
CurrentAddressTwo = "Apt 13",
CurrentAddressThree = "Additional Address Line",
CurrentAddressFour = "ReallyLongCityName",
CurrentAddressFive = "Wisconsin, 53186",
SecondaryName = "Test Testerson",
BusinessName = "Testerson's Testing",
NewAddressLine = "New Address Line PO BOX Test",
City = "New Test City",
StateCode = "WI",
ZipCode = "53022",
ZipSuffix = "-1234",
UserIdTwo = "123456",
StatementCode = "TestStatementCode"
};
var currentAddress = new PersonPostalAddress()
{
AddressNumber = 456
};
//Act
var result = _updateNcoaProcessService.MapPersonAddrLine(98765, currentAddress, ncoaRecord);
//Assert
Assert.AreEqual(98765, result.PersonNumber);
Assert.AreEqual("PRI", result.Id);
Assert.AreEqual("PRI", result.AddressUseCode);
Assert.AreEqual(456, result.AddressNumber);
Assert.AreEqual("New Address Line PO BOX Test", result.AddressLine1);
Assert.AreEqual("POBN", result.AddressLineTypeCode1);
Assert.Null(result.AddressLine2);
Assert.Null(result.AddressLineTypeCode2);
Assert.Null(result.AddressLine3);
Assert.Null(result.AddressLineTypeCode3);
Assert.AreEqual("New Test City", result.CityName);
Assert.AreEqual("WI", result.CountrySubdivisionCode);
Assert.AreEqual("53022", result.PostalCode);
Assert.AreEqual("1234", result.ZipPlus);
Assert.AreEqual("USA", result.CountryCode);
Assert.AreEqual("/Persons/98765/PostalAddresses/PRI", result.Url);
Assert.False(result.IsPerformIRSCorrection);
}
[Test]
public async Task CheckForBoBoxAddressLineType_NoPoBox()
{
//Arrange
var personAddrLine = new PersonAddrLine()
{
AddressLine1 = "Negative Test",
AddressLineTypeCode1 = "ST"
};
//Act
var result = _updateNcoaProcessService.CheckForPoBoxAddressLineType(personAddrLine);
//Assert
Assert.AreEqual("Negative Test", result.AddressLine1);
Assert.AreEqual("ST", result.AddressLineTypeCode1);
}
[Test]
public async Task CheckForBoBoxAddressLineType_PoBox()
{
//Arrange
var personAddrLine = new PersonAddrLine()
{
AddressLine1 = "Positive Test PO BOX Something",
AddressLineTypeCode1 = "ST"
};
//Act
var result = _updateNcoaProcessService.CheckForPoBoxAddressLineType(personAddrLine);
//Assert
Assert.AreEqual("Positive Test PO BOX Something", result.AddressLine1);
Assert.AreEqual("POBN", result.AddressLineTypeCode1);
}
[Test]
public async Task CreateErrorrecord_NoPersonNumber()
{
// Arrange
var updateResult = new UpdateNcoaProcessService.NcoaUpdateResult();
var ncoaRecord = new NcoaRecord()
{
UserId = "123456",
NcoaType = "I",
ChangeDate = "202212",
PrimaryName = "Test E Testerson",
CurrentAddressOne = "1 Imaginary Lane",
CurrentAddressTwo = "Apt 13",
CurrentAddressThree = "Additional Address Line",
CurrentAddressFour = "ReallyLongCityName",
CurrentAddressFive = "Wisconsin, 53186",
SecondaryName = "Test Testerson",
BusinessName = "Testerson's Testing",
NewAddressLine = "New Address Line PO BOX Test",
City = "New Test City",
StateCode = "WI",
ZipCode = "53022",
ZipSuffix = "1234",
UserIdTwo = "123456",
StatementCode = "TestStatementCode"
};
var expectedErrorrecord = "202212|123456||Test E Testerson|1 Imaginary Lane|Apt 13|Additional Address Line|ReallyLongCityName|Wisconsin, 53186" +
"|New Address Line PO BOX Test|New Test City|WI|53022|1234|This is a test error message\n";
//Act
updateResult.AddStringToErrorList(ncoaRecord, "This is a test error message");
//Assert
Assert.AreEqual(1, updateResult.ErrorList.Count);
Assert.AreEqual(expectedErrorrecord, updateResult.ErrorList.FirstOrDefault());
}
[Test]
public async Task CreateErrorrecord_WithPersonNumber()
{
// Arrange
var updateResult = new UpdateNcoaProcessService.NcoaUpdateResult();
var ncoaRecord = new NcoaRecord()
{
UserId = "123456",
NcoaType = "I",
ChangeDate = "202212",
PrimaryName = "Test E Testerson",
CurrentAddressOne = "1 Imaginary Lane",
CurrentAddressTwo = "Apt 13",
CurrentAddressThree = "Additional Address Line",
CurrentAddressFour = "ReallyLongCityName",
CurrentAddressFive = "Wisconsin, 53186",
SecondaryName = "Test Testerson",
BusinessName = "Testerson's Testing",
NewAddressLine = "New Address Line PO BOX Test",
City = "New Test City",
StateCode = "WI",
ZipCode = "53022",
ZipSuffix = "1234",
UserIdTwo = "123456",
StatementCode = "TestStatementCode"
};
var expectedErrorrecord = "202212|123456|11111|Test E Testerson|1 Imaginary Lane|Apt 13|Additional Address Line|ReallyLongCityName|Wisconsin, 53186" +
"|New Address Line PO BOX Test|New Test City|WI|53022|1234|This is a test error message\n";
//Act
updateResult.AddStringToErrorList(ncoaRecord, "This is a test error message", "11111");
//Assert
Assert.AreEqual(1, updateResult.ErrorList.Count);
Assert.AreEqual(expectedErrorrecord, updateResult.ErrorList.FirstOrDefault());
}
[Test]
public async Task ConvertToTitleCase_FromLower()
{
//Arrange
var textToChange = "milwaukee";
//Act
var result = _updateNcoaProcessService.ConvertToTitleCase(textToChange);
//Assert
Assert.AreEqual("Milwaukee", result);
}
[Test]
public async Task ConvertToTitleCase_TwoWordCity()
{
//Arrange
var textToChange = "menomonee falls";
//Act
var result = _updateNcoaProcessService.ConvertToTitleCase(textToChange);
//Assert
Assert.AreEqual("Menomonee Falls", result);
}
[Test]
public async Task BuildTotalBatchSummary_Ok_OneResult()
{
// Arrange
var updateResults = new List<UpdateNcoaProcessService.NcoaUpdateResult>();
var resultOne = new UpdateNcoaProcessService.NcoaUpdateResult();
var errorListOne = new List<string>()
{
"errorOne",
"errorTwo",
"ErrorThree"
};
var persAddrLineList = new List<PersonAddrLine>();
var persAddrLineOne = new PersonAddrLine()
{
AddressLine1 = "1234 Some Address",
AddressLineTypeCode1 = "ST"
};
var persAddrLineTwo = new PersonAddrLine()
{
AddressLine1 = "5678 Some Address",
AddressLineTypeCode1 = "ST"
};
persAddrLineList.Add(persAddrLineOne);
persAddrLineList.Add(persAddrLineTwo);
resultOne.ErrorList = errorListOne;
resultOne.UpdateList = persAddrLineList;
resultOne.TotalRecordsFound = 5;
updateResults.Add(resultOne);
// Act
var result = _updateNcoaProcessService.BuildTotalBatchSummary(updateResults, true);
// Assert
Assert.AreEqual(5, result.TotalRecordsFound);
Assert.AreEqual(3, result.TotalErrorRecords);
Assert.AreEqual(2, result.TotalRecordsUpdated);
Assert.True(result.ErrorFileCreated);
}
[Test]
public async Task BuildTotalBatchSummary_Ok_MultipleResults()
{
// Arrange
var updateResults = new List<UpdateNcoaProcessService.NcoaUpdateResult>();
var resultOne = new UpdateNcoaProcessService.NcoaUpdateResult();
var errorListOne = new List<string>()
{
"errorOne",
"errorTwo",
"ErrorThree"
};
var persAddrLineListOne = new List<PersonAddrLine>();
var persAddrLineOne = new PersonAddrLine()
{
AddressLine1 = "1234 Some Address",
AddressLineTypeCode1 = "ST"
};
var persAddrLineTwo = new PersonAddrLine()
{
AddressLine1 = "5678 Some Address",
AddressLineTypeCode1 = "ST"
};
persAddrLineListOne.Add(persAddrLineOne);
persAddrLineListOne.Add(persAddrLineTwo);
resultOne.ErrorList = errorListOne;
resultOne.UpdateList = persAddrLineListOne;
resultOne.TotalRecordsFound = 5;
var resultTwo = new UpdateNcoaProcessService.NcoaUpdateResult();
var errorListTwo = new List<string>()
{
"errorOne",
"errorTwo",
};
var persAddrLineThree = new PersonAddrLine()
{
AddressLine1 = "Updated Address",
AddressLineTypeCode1 = "ST"
};
var persAddrLineListTwo = new List<PersonAddrLine>();
persAddrLineListTwo.Add(persAddrLineThree);
resultTwo.ErrorList = errorListTwo;
resultTwo.UpdateList = persAddrLineListTwo;
resultTwo.TotalRecordsFound = 3;
updateResults.Add(resultOne);
updateResults.Add(resultTwo);
// Act
var result = _updateNcoaProcessService.BuildTotalBatchSummary(updateResults, false);
// Assert
Assert.AreEqual(8, result.TotalRecordsFound);
Assert.AreEqual(5, result.TotalErrorRecords);
Assert.AreEqual(3, result.TotalRecordsUpdated);
Assert.False(result.ErrorFileCreated);
}
[Test]
public async Task BuildTotalBatchSummary_Ok_NoResults()
{
// Arrange
var updateResults = new List<UpdateNcoaProcessService.NcoaUpdateResult>();
// Act
var result = _updateNcoaProcessService.BuildTotalBatchSummary(updateResults, false);
// Assert
Assert.AreEqual(0, result.TotalRecordsFound);
Assert.AreEqual(0, result.TotalErrorRecords);
Assert.AreEqual(0, result.TotalRecordsUpdated);
Assert.False(result.ErrorFileCreated);
}
[Test]
public async Task CreateTotalBatchSummaryString_OneResult_WithLocation()
{
// Arrange
var updateResults = new List<UpdateNcoaProcessService.NcoaUpdateResult>();
var resultOne = new UpdateNcoaProcessService.NcoaUpdateResult();
var errorListOne = new List<string>()
{
"errorOne",
"errorTwo",
"ErrorThree"
};
var persAddrLineList = new List<PersonAddrLine>();
var persAddrLineOne = new PersonAddrLine()
{
AddressLine1 = "1234 Some Address",
AddressLineTypeCode1 = "ST"
};
var persAddrLineTwo = new PersonAddrLine()
{
AddressLine1 = "5678 Some Address",
AddressLineTypeCode1 = "ST"
};
persAddrLineList.Add(persAddrLineOne);
persAddrLineList.Add(persAddrLineTwo);
resultOne.ErrorList = errorListOne;
resultOne.UpdateList = persAddrLineList;
resultOne.TotalRecordsFound = 5;
updateResults.Add(resultOne);
var batchSummary = new UpdateNcoaProcessService.NcoaTotalBatchSummary(updateResults, true);
batchSummary.TotalRecordsFound = 5;
batchSummary.TotalErrorRecords = 3;
batchSummary.TotalRecordsUpdated = 2;
var expectedResult = $"NCOA Update Total Batch Summary:<br><br>Total Files in Batch: 1<br><br>Total Records Received: " +
$"5<br><br>Total Records Updated: 2<br><br>Total Error Records: " +
$"3<br><br>Total Records Processed: 5<br><br>" +
$"Error File Created: True<br><br>Error File Location: Test Location<br><br>";
// Act
var result = _updateNcoaProcessService.CreateTotalBatchSummaryString(batchSummary, "Test Location");
// Assert
Assert.AreEqual(expectedResult, result);
}
[Test]
public async Task CreateTotalBatchSummaryString_TwoResults_NoLocation()
{
// Arrange
var updateResults = new List<UpdateNcoaProcessService.NcoaUpdateResult>();
var resultOne = new UpdateNcoaProcessService.NcoaUpdateResult();
var errorListOne = new List<string>()
{
"errorOne",
"errorTwo",
"ErrorThree"
};
var persAddrLineList = new List<PersonAddrLine>();
var persAddrLineOne = new PersonAddrLine()
{
AddressLine1 = "1234 Some Address",
AddressLineTypeCode1 = "ST"
};
var persAddrLineTwo = new PersonAddrLine()
{
AddressLine1 = "5678 Some Address",
AddressLineTypeCode1 = "ST"
};
persAddrLineList.Add(persAddrLineOne);
persAddrLineList.Add(persAddrLineTwo);
var resultTwo = new UpdateNcoaProcessService.NcoaUpdateResult();
var errorListTwo = new List<string>()
{
"errorOne",
"errorTwo",
};
var persAddrLineThree = new PersonAddrLine()
{
AddressLine1 = "Updated Address",
AddressLineTypeCode1 = "ST"
};
var persAddrLineListTwo = new List<PersonAddrLine>();
persAddrLineListTwo.Add(persAddrLineThree);
resultTwo.ErrorList = errorListTwo;
resultTwo.UpdateList = persAddrLineListTwo;
resultTwo.TotalRecordsFound = 3;
resultOne.ErrorList = errorListOne;
resultOne.UpdateList = persAddrLineList;
resultOne.TotalRecordsFound = 5;
updateResults.Add(resultOne);
updateResults.Add(resultTwo);
var batchSummary = new UpdateNcoaProcessService.NcoaTotalBatchSummary(updateResults, false);
batchSummary.TotalRecordsFound = 8;
batchSummary.TotalErrorRecords = 5;
batchSummary.TotalRecordsUpdated = 3;
var expectedResult = $"NCOA Update Total Batch Summary:<br><br>Total Files in Batch: 2<br><br>Total Records Received: " +
$"8<br><br>Total Records Updated: 3<br><br>Total Error Records: " +
$"5<br><br>Total Records Processed: 8<br><br>" +
$"Error File Created: False<br><br>";
// Act
var result = _updateNcoaProcessService.CreateTotalBatchSummaryString(batchSummary, "Test Location");
// Assert
Assert.AreEqual(expectedResult, result);
}
[Test]
public async Task BuildFileUpdateSummary()
{
// Arrange
var updateResult = new UpdateNcoaProcessService.NcoaUpdateResult("Test File Name");
var errorListOne = new List<string>()
{
"errorOne",
"errorTwo",
"ErrorThree"
};
var persAddrLineList = new List<PersonAddrLine>();
var persAddrLineOne = new PersonAddrLine()
{
AddressLine1 = "1234 Some Address",
AddressLineTypeCode1 = "ST"
};
var persAddrLineTwo = new PersonAddrLine()
{
AddressLine1 = "5678 Some Address",
AddressLineTypeCode1 = "ST"
};
persAddrLineList.Add(persAddrLineOne);
persAddrLineList.Add(persAddrLineTwo);
updateResult.ErrorList = errorListOne;
updateResult.UpdateList = persAddrLineList;
updateResult.TotalRecordsFound = 5;
var expectedResult = $"--------------<br><br>NCOA File In Batch Summary:<br><br>Filename: Test File Name" +
$"<br><br>Total Records Received: 5<br><br>Total Records Updated: 2" +
$"<br><br>Total Error Records: 3<br><br>Total Records Processed: " +
$"5<br><br>";
// Act
var result = _updateNcoaProcessService.BuildFileUpdateSummary(updateResult);
// Assert
Assert.AreEqual(expectedResult, result);
}
}