53 lines
2.3 KiB
C#
53 lines
2.3 KiB
C#
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Deployment;
|
|
using ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Repositories;
|
|
|
|
namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests;
|
|
|
|
/// <summary>
|
|
/// Retention purge for <see cref="SystemArtifactDeploymentRecord"/> rows (review 2026-10-21
|
|
/// 08/G2): one row is written per Deploy Artifacts run and nothing reads them back, so they
|
|
/// must share the terminal deployment-record retention window.
|
|
/// </summary>
|
|
public sealed class SystemArtifactDeploymentPurgeTests : IDisposable
|
|
{
|
|
private readonly ScadaBridgeDbContext _context = SqliteTestHelper.CreateInMemoryContext();
|
|
private readonly DeploymentManagerRepository _repository;
|
|
|
|
/// <summary>Initializes the repository over a fresh in-memory SQLite context.</summary>
|
|
public SystemArtifactDeploymentPurgeTests()
|
|
{
|
|
_repository = new DeploymentManagerRepository(_context);
|
|
}
|
|
|
|
/// <summary>Releases the in-memory database.</summary>
|
|
public void Dispose() => _context.Dispose();
|
|
|
|
private async Task SeedAsync(DateTimeOffset deployedAt)
|
|
{
|
|
await _repository.AddSystemArtifactDeploymentAsync(
|
|
new SystemArtifactDeploymentRecord("Artifacts", "admin") { DeployedAt = deployedAt });
|
|
await _repository.SaveChangesAsync();
|
|
}
|
|
|
|
/// <summary>Only rows older than the cutoff are deleted, in bounded batches.</summary>
|
|
/// <returns>A task that represents the asynchronous operation.</returns>
|
|
[Fact]
|
|
public async Task Purge_DeletesOnlyRowsOlderThanCutoff_InBoundedBatches()
|
|
{
|
|
var now = DateTimeOffset.UtcNow;
|
|
await SeedAsync(now.AddDays(-400));
|
|
await SeedAsync(now.AddDays(-380));
|
|
await SeedAsync(now.AddDays(-370));
|
|
await SeedAsync(now.AddDays(-1));
|
|
var cutoff = now.AddDays(-365);
|
|
|
|
Assert.Equal(2, await _repository.PurgeSystemArtifactDeploymentRecordsAsync(cutoff, batchSize: 2));
|
|
Assert.Equal(1, await _repository.PurgeSystemArtifactDeploymentRecordsAsync(cutoff, batchSize: 2));
|
|
Assert.Equal(0, await _repository.PurgeSystemArtifactDeploymentRecordsAsync(cutoff, batchSize: 2));
|
|
|
|
var remaining = await _repository.GetAllSystemArtifactDeploymentsAsync();
|
|
var survivor = Assert.Single(remaining);
|
|
Assert.True(survivor.DeployedAt > cutoff);
|
|
}
|
|
}
|