Files
2026-03-13 09:11:35 -05:00

197 lines
10 KiB
C#

using LCU.API.Internal.DocumentLib.Configurations;
using LCU.API.Internal.DocumentLib.Containers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using MongoDB.Driver;
using OwnerNumberMigrationTest.TestDataFactories;
using OwnerNumberMigrationTest.TestDoubles;
namespace OwnerNumberMigrationTest;
[Category("Integration")]
public class OwnerNumberMigrationIntegrationTest : IDisposable
{
private readonly FakeMongoCollectionFactory _collectionFactory = new();
private readonly DocumentInformation _personNumber;
private readonly DocumentInformation _personNumbers;
private readonly DocumentInformation _organizationNumber;
private readonly DocumentInformation _organizationNumbers;
private readonly DocumentInformation _accountNumber;
private readonly DocumentInformation _personNumberMigrated;
private readonly DocumentInformation _personNumbersMigrated;
private readonly DocumentInformation _organizationNumberMigrated;
private readonly DocumentInformation _organizationNumbersMigrated;
private readonly DocumentInformation _accountNumberMigrated;
public OwnerNumberMigrationIntegrationTest()
{
static string SingleOwnerFactory() => Guid.NewGuid().ToString();
static string MultipleOwnersFactory() => string.Join
(
",",
EnumerableDataSeriesFactory.CreateSeries(SingleOwnerFactory, 3)
);
_personNumber = DocumentInformationFactory.CreateDocumentInformation();
_personNumber.Attributes.Clear();
_personNumber.Attributes["PersonNumber"] = SingleOwnerFactory();
_personNumbers = DocumentInformationFactory.CreateDocumentInformation();
_personNumbers.Attributes.Clear();
_personNumbers.Attributes["PersonNumbers"] = MultipleOwnersFactory();
_organizationNumber = DocumentInformationFactory.CreateDocumentInformation();
_organizationNumber.Attributes.Clear();
_organizationNumber.Attributes["OrganizationNumber"] = SingleOwnerFactory();
_organizationNumbers = DocumentInformationFactory.CreateDocumentInformation();
_organizationNumbers.Attributes.Clear();
_organizationNumbers.Attributes["OrganizationNumbers"] = MultipleOwnersFactory();
_accountNumber = DocumentInformationFactory.CreateDocumentInformation();
_accountNumber.Attributes.Clear();
_accountNumber.Attributes["AccountNumber"] = SingleOwnerFactory();
_personNumberMigrated = DocumentInformationFactory.CreateDocumentInformation();
_personNumberMigrated.Attributes.Clear();
_personNumberMigrated.Attributes["PersonNumber"] = SingleOwnerFactory();
_personNumberMigrated.PersonNumbers = _personNumberMigrated.Attributes["PersonNumber"].Split(",");
_personNumbersMigrated = DocumentInformationFactory.CreateDocumentInformation();
_personNumbersMigrated.Attributes.Clear();
_personNumbersMigrated.Attributes["PersonNumbers"] = MultipleOwnersFactory();
_personNumbersMigrated.PersonNumbers = _personNumbersMigrated.Attributes["PersonNumbers"].Split(",");
_organizationNumberMigrated = DocumentInformationFactory.CreateDocumentInformation();
_organizationNumberMigrated.Attributes.Clear();
_organizationNumberMigrated.Attributes["OrganizationNumber"] = SingleOwnerFactory();
_organizationNumberMigrated.OrganizationNumbers =
_organizationNumberMigrated.Attributes["OrganizationNumber"].Split(",");
_organizationNumbersMigrated = DocumentInformationFactory.CreateDocumentInformation();
_organizationNumbersMigrated.Attributes.Clear();
_organizationNumbersMigrated.Attributes["OrganizationNumbers"] = MultipleOwnersFactory();
_organizationNumbersMigrated.OrganizationNumbers =
_organizationNumbersMigrated.Attributes["OrganizationNumbers"].Split(",");
_accountNumberMigrated = DocumentInformationFactory.CreateDocumentInformation();
_accountNumberMigrated.Attributes.Clear();
_accountNumberMigrated.Attributes["AccountNumber"] = SingleOwnerFactory();
_accountNumberMigrated.AccountNumber = _accountNumberMigrated.Attributes["AccountNumber"];
}
[SetUp]
public async Task Setup()
{
var collection = _collectionFactory.GetCollection<DocumentInformation>();
await collection.InsertManyAsync(new[]
{
_personNumber,
_personNumbers,
_organizationNumber,
_organizationNumbers,
_accountNumber,
_personNumberMigrated,
_personNumbersMigrated,
_organizationNumberMigrated,
_organizationNumbersMigrated,
_accountNumberMigrated
});
await collection.UpdateManyAsync
(
Builders<DocumentInformation>.Filter.In
(
d => d.DocumentId,
new[]
{
_personNumber.DocumentId,
_personNumbers.DocumentId,
_organizationNumber.DocumentId,
_organizationNumbers.DocumentId,
_accountNumber.DocumentId
}
),
Builders<DocumentInformation>.Update
.Unset(nameof(DocumentInformation.PersonNumbers))
.Unset(nameof(DocumentInformation.OrganizationNumbers))
.Unset(nameof(DocumentInformation.AccountNumber))
);
}
[Test]
public async Task Program_AllCases_MigratesDocuments()
{
await Host.CreateDefaultBuilder()
.ConfigureServices(services =>
{
services.RegisterOwnerMigrationServices();
services.AddSingleton<ILogger>(NullLogger.Instance);
services.AddSingleton(new DatabaseConfiguration
{
ConnectionString = _collectionFactory.ConnectionString,
DatabaseName = _collectionFactory.DatabaseName<DocumentInformation>(),
DocumentContainerName = _collectionFactory.CollectionName<DocumentInformation>()
});
})
.Build()
.RunAsync();
var migratedDocuments = (await
(await
_collectionFactory
.GetCollection<DocumentInformation>()
.FindAsync(Builders<DocumentInformation>.Filter.Empty)
).ToListAsync())
.ToDictionary(d => d.DocumentId);
CollectionAssert.AreEqual(_personNumber.Attributes["PersonNumber"].Split(","),
migratedDocuments[_personNumber.DocumentId].PersonNumbers);
CollectionAssert.AreEqual(_personNumbers.Attributes["PersonNumbers"].Split(","),
migratedDocuments[_personNumbers.DocumentId].PersonNumbers);
CollectionAssert.AreEqual(_organizationNumber.Attributes["OrganizationNumber"].Split(","),
migratedDocuments[_organizationNumber.DocumentId].OrganizationNumbers);
CollectionAssert.AreEqual(_organizationNumbers.Attributes["OrganizationNumbers"].Split(","),
migratedDocuments[_organizationNumbers.DocumentId].OrganizationNumbers);
Assert.AreEqual(_accountNumber.Attributes["AccountNumber"],
migratedDocuments[_accountNumber.DocumentId].AccountNumber);
CollectionAssert.AreEqual(_personNumber.Attributes["PersonNumber"],
migratedDocuments[_personNumber.DocumentId].Attributes["PersonNumber"]);
CollectionAssert.AreEqual(_personNumbers.Attributes["PersonNumbers"],
migratedDocuments[_personNumbers.DocumentId].Attributes["PersonNumbers"]);
CollectionAssert.AreEqual(_organizationNumber.Attributes["OrganizationNumber"],
migratedDocuments[_organizationNumber.DocumentId].Attributes["OrganizationNumber"]);
CollectionAssert.AreEqual(_organizationNumbers.Attributes["OrganizationNumbers"],
migratedDocuments[_organizationNumbers.DocumentId].Attributes["OrganizationNumbers"]);
Assert.AreEqual(_accountNumber.Attributes["AccountNumber"],
migratedDocuments[_accountNumber.DocumentId].Attributes["AccountNumber"]);
CollectionAssert.AreEqual(_personNumberMigrated.PersonNumbers,
migratedDocuments[_personNumberMigrated.DocumentId].PersonNumbers);
CollectionAssert.AreEqual(_personNumbersMigrated.PersonNumbers,
migratedDocuments[_personNumbersMigrated.DocumentId].PersonNumbers);
CollectionAssert.AreEqual(_organizationNumberMigrated.OrganizationNumbers,
migratedDocuments[_organizationNumberMigrated.DocumentId].OrganizationNumbers);
CollectionAssert.AreEqual(_organizationNumbersMigrated.OrganizationNumbers,
migratedDocuments[_organizationNumbersMigrated.DocumentId].OrganizationNumbers);
CollectionAssert.AreEqual(_accountNumberMigrated.OrganizationNumbers,
migratedDocuments[_accountNumberMigrated.DocumentId].OrganizationNumbers);
CollectionAssert.AreEqual(_personNumberMigrated.Attributes["PersonNumber"],
migratedDocuments[_personNumberMigrated.DocumentId].Attributes["PersonNumber"]);
CollectionAssert.AreEqual(_personNumbersMigrated.Attributes["PersonNumbers"],
migratedDocuments[_personNumbersMigrated.DocumentId].Attributes["PersonNumbers"]);
CollectionAssert.AreEqual(_organizationNumberMigrated.Attributes["OrganizationNumber"],
migratedDocuments[_organizationNumberMigrated.DocumentId].Attributes["OrganizationNumber"]);
CollectionAssert.AreEqual(_organizationNumbersMigrated.Attributes["OrganizationNumbers"],
migratedDocuments[_organizationNumbersMigrated.DocumentId].Attributes["OrganizationNumbers"]);
CollectionAssert.AreEqual(_accountNumberMigrated.Attributes["AccountNumber"],
migratedDocuments[_accountNumberMigrated.DocumentId].Attributes["AccountNumber"]);
}
public void Dispose()
{
_collectionFactory.Dispose();
}
}