feat: implement cleaning up table

This commit is contained in:
Stevan Freeborn
2024-08-25 17:08:44 -05:00
parent a173220e51
commit c35bcdad90
10 changed files with 96 additions and 9 deletions
@@ -36,9 +36,11 @@ public class DatabaseMaintainerTests : DatabaseTest, IDisposable
_ofacFileServiceOptions
);
var uow = new EfUnitOfWork(_context, _loggerFactory);
var logger = _loggerFactory.CreateLogger<DatabaseMaintainer>();
_databaseMaintainer = new DatabaseMaintainer(uow, ofacFileService, logger);
var uowLogger = _loggerFactory.CreateLogger<EfUnitOfWork>();
var dbMaintainerLogger = _loggerFactory.CreateLogger<DatabaseMaintainer>();
var uow = new EfUnitOfWork(_context, uowLogger, _loggerFactory);
_databaseMaintainer = new DatabaseMaintainer(uow, ofacFileService, dbMaintainerLogger);
}
[Fact]
@@ -10,9 +10,10 @@ public class EfUnitOfWorkTests : DatabaseTest
public EfUnitOfWorkTests()
{
var logger = LoggerFactory.Create(c => c.ClearProviders());
var loggerFactory = LoggerFactory.Create(c => c.ClearProviders());
var logger = loggerFactory.CreateLogger<EfUnitOfWork>();
_uow = new(_context, logger);
_uow = new(_context, logger, loggerFactory);
}
[Fact]
@@ -78,4 +79,14 @@ public class EfUnitOfWorkTests : DatabaseTest
await action.Should().ThrowAsync<ObjectDisposedException>();
}
[Fact]
public void Dispose_WhenCalled_ItShouldDisposeContext()
{
_uow.Dispose();
var action = () => _context.SaveChangesAsync();
action.Should().ThrowAsync<ObjectDisposedException>();
}
}
@@ -82,4 +82,33 @@ public class SdnRepositoryTests : RepositoryTest
result.Should().HaveCount(1);
result.First().Should().BeEquivalentTo(target);
}
[Fact]
public async Task DeleteWhereAsync_WithPredicate_ShouldDeleteEntitiesMatchingPredicate()
{
var entities = _faker.Generate(3);
var entityIds = entities.Select(x => x.Id).ToList();
foreach (var entity in entities)
{
await _repository.Upsert(entity);
}
await _context.SaveChangesAsync();
var createdEntities = await _context.Set<Sdn>()
.Where(x => entityIds.Contains(x.Id))
.ToListAsync();
createdEntities.Should().HaveCount(3);
var target = entities[0];
await _repository.DeleteWhereAsync(x => entityIds.Contains(x.Id));
var remainingEntities = await _context.Set<Sdn>()
.Where(x => entityIds.Contains(x.Id))
.ToListAsync();
remainingEntities.Should().HaveCount(0);
}
}
@@ -3,12 +3,13 @@ namespace SanctionsSearch.Worker.Tests.Unit;
public class EfUnitOfWorkTests
{
private readonly Mock<DbContext> _contextMock = new();
private readonly Mock<ILogger<EfUnitOfWork>> _loggerMock = new();
private readonly Mock<ILoggerFactory> _loggerFactoryMock = new();
private readonly EfUnitOfWork _unitOfWork;
public EfUnitOfWorkTests()
{
_unitOfWork = new(_contextMock.Object, _loggerFactoryMock.Object);
_unitOfWork = new(_contextMock.Object, _loggerMock.Object, _loggerFactoryMock.Object);
}
[Fact]
@@ -66,7 +67,19 @@ public class EfUnitOfWorkTests
.Setup(x => x.DisposeAsync())
.Throws(new Exception());
var action = _unitOfWork.DisposeAsync;
var action = async () => await _unitOfWork.DisposeAsync();
action.Should().NotThrowAsync();
}
[Fact]
public void Dispose_WhenExceptionIsThrown_ItShouldBeCaught()
{
_contextMock
.Setup(x => x.Dispose())
.Throws(new Exception());
var action = _unitOfWork.Dispose;
action.Should().NotThrow();
}