197 lines
10 KiB
C#
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();
|
|
}
|
|
} |