124 lines
4.8 KiB
C#
124 lines
4.8 KiB
C#
using FluentAssertions;
|
|
using LCU.API.Internal.DocumentLib.Containers;
|
|
using LCU.API.Internal.DocumentLib.Repositories;
|
|
using LCU.API.Internal.DocumentLibTest.TestDataFactories;
|
|
using LCU.API.Internal.DocumentLibTest.TestDoubles;
|
|
using LCU.Library.Internal.DocumentModels.Requests;
|
|
using MongoDB.Driver;
|
|
|
|
namespace LCU.API.Internal.DocumentLibTest.Repositories;
|
|
|
|
public class DocumentAuditRepositoryTest : IDisposable
|
|
{
|
|
private readonly IDocumentAuditRepository _repository;
|
|
|
|
private readonly FakeMongoCollectionFactory _collectionFactory = new();
|
|
|
|
public DocumentAuditRepositoryTest()
|
|
{
|
|
_repository = new DocumentAuditRepository(_collectionFactory);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetDocumentAudits_FieldAuditRecordsExistForId_ReturnsMatchedLogsById()
|
|
{
|
|
var audits = EnumerableDataSeriesFactory.CreateSeries(() => FieldAuditFactory(), 5).ToArray();
|
|
await _collectionFactory.GetCollection<DocumentAudit>().InsertManyAsync(audits);
|
|
var expectedAudits = new[]{ audits.First(), audits.Last() };
|
|
var documentIds = expectedAudits.Select(a => a.DocumentId).ToArray();
|
|
|
|
var retrievedAudits = await _repository.GetDocumentAudits(documentIds);
|
|
|
|
retrievedAudits.Should().HaveSameCount(documentIds);
|
|
expectedAudits.Should().BeEquivalentTo(retrievedAudits, a => a.Using(DateTimeComparison.Truncated));
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetDocumentAudits_ActionAuditRecordsExistForId_ReturnsMatchedLogsById()
|
|
{
|
|
var audits = EnumerableDataSeriesFactory.CreateSeries(() => ActionAuditFactory(), 5).ToArray();
|
|
await _collectionFactory.GetCollection<DocumentAudit>().InsertManyAsync(audits);
|
|
var expectedAudits = new[] { audits.First(), audits.Last() };
|
|
var documentIds = expectedAudits.Select(a => a.DocumentId).ToArray();
|
|
|
|
var retrievedAudits = await _repository.GetDocumentAudits(documentIds);
|
|
|
|
retrievedAudits.Should().HaveSameCount(documentIds);
|
|
expectedAudits.Should().BeEquivalentTo(retrievedAudits, a => a.Using(DateTimeComparison.Truncated));
|
|
}
|
|
|
|
[Test]
|
|
public async Task SaveDocumentAudits_FieldAuditsSubmitted_SavesAll()
|
|
{
|
|
var audits = EnumerableDataSeriesFactory.CreateSeries(() => FieldAuditFactory(), 5).ToArray();
|
|
|
|
await _repository.SaveDocumentAudits(audits);
|
|
|
|
var savedAudits = await (
|
|
await _collectionFactory
|
|
.GetCollection<DocumentAudit>()
|
|
.FindAsync(Builders<DocumentAudit>.Filter.In
|
|
(
|
|
nameof(DocumentAudit.DocumentId),
|
|
audits.Select(a => a.DocumentId))
|
|
)
|
|
).ToListAsync();
|
|
audits.Should().BeEquivalentTo(savedAudits, a => a.Using(DateTimeComparison.Truncated));
|
|
}
|
|
|
|
[Test]
|
|
public async Task SaveDocumentAudits_ActionAuditsSubmitted_SavesAll()
|
|
{
|
|
var audits = EnumerableDataSeriesFactory.CreateSeries(() => ActionAuditFactory(), 5).ToArray();
|
|
|
|
await _repository.SaveDocumentAudits(audits);
|
|
|
|
var savedAudits = await (
|
|
await _collectionFactory
|
|
.GetCollection<DocumentAudit>()
|
|
.FindAsync(Builders<DocumentAudit>.Filter.In(nameof(DocumentAudit.DocumentId),
|
|
audits.Select(a => a.DocumentId)))
|
|
).ToListAsync();
|
|
audits.Should().BeEquivalentTo(savedAudits, a => a.Using(DateTimeComparison.Truncated));
|
|
}
|
|
|
|
[Test]
|
|
public async Task SaveDocumentAudits_MultipleTypesOfAudits_CanRetrieveAll()
|
|
{
|
|
var documentId = Guid.NewGuid();
|
|
var fieldAudits = EnumerableDataSeriesFactory.CreateSeries<DocumentAudit>(() => FieldAuditFactory(documentId), 5);
|
|
var actionAudits = EnumerableDataSeriesFactory.CreateSeries<DocumentAudit>(() => ActionAuditFactory(documentId), 5);
|
|
var audits = fieldAudits.Concat(actionAudits).ToArray();
|
|
|
|
await _repository.SaveDocumentAudits(audits);
|
|
var savedAudits = await _repository.GetDocumentAudits(documentId);
|
|
|
|
audits.Should().BeEquivalentTo(savedAudits, a => a.Using(DateTimeComparison.Truncated));
|
|
}
|
|
|
|
private static DocumentFieldAudit FieldAuditFactory(Guid? documentId = null) => new
|
|
(
|
|
documentId ?? Guid.NewGuid(),
|
|
Guid.NewGuid().ToString(),
|
|
DateTime.UtcNow,
|
|
Guid.NewGuid().ToString(),
|
|
Guid.NewGuid().ToString(),
|
|
Guid.NewGuid().ToString(),
|
|
Guid.NewGuid().ToString()
|
|
);
|
|
|
|
private static DocumentActionAudit ActionAuditFactory(Guid? documentId = null) => new
|
|
(
|
|
documentId ?? Guid.NewGuid(),
|
|
Guid.NewGuid().ToString(),
|
|
DateTime.UtcNow,
|
|
Guid.NewGuid().ToString(),
|
|
(DocumentAction)DateTime.Now.Millisecond,
|
|
Guid.NewGuid().ToString()
|
|
);
|
|
|
|
public void Dispose()
|
|
{
|
|
_collectionFactory.Dispose();
|
|
}
|
|
} |