2026-04-07 11:39:31 +01:00
|
|
|
// tests/SpamGuard.Tests/State/ProcessedUidStoreTests.cs
|
|
|
|
|
namespace SpamGuard.Tests.State;
|
|
|
|
|
|
|
|
|
|
using SpamGuard.State;
|
|
|
|
|
|
|
|
|
|
public class ProcessedUidStoreTests : IDisposable
|
|
|
|
|
{
|
|
|
|
|
private readonly string _tempDir;
|
|
|
|
|
private readonly ProcessedUidStore _store;
|
|
|
|
|
|
|
|
|
|
public ProcessedUidStoreTests()
|
|
|
|
|
{
|
|
|
|
|
_tempDir = Path.Combine(Path.GetTempPath(), $"spamguard-test-{Guid.NewGuid()}");
|
|
|
|
|
Directory.CreateDirectory(_tempDir);
|
2026-04-12 10:10:58 +01:00
|
|
|
_store = new ProcessedUidStore(_tempDir, "TestAccount");
|
2026-04-07 11:39:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
if (Directory.Exists(_tempDir))
|
|
|
|
|
Directory.Delete(_tempDir, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Contains_ReturnsFalse_WhenUidNotAdded()
|
|
|
|
|
{
|
|
|
|
|
Assert.False(_store.Contains(42));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Contains_ReturnsTrue_AfterAdd()
|
|
|
|
|
{
|
|
|
|
|
_store.Add(42);
|
|
|
|
|
Assert.True(_store.Contains(42));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Add_IsDuplicate_DoesNotThrow()
|
|
|
|
|
{
|
|
|
|
|
_store.Add(42);
|
|
|
|
|
_store.Add(42);
|
|
|
|
|
Assert.True(_store.Contains(42));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Save_And_Load_RoundTrips()
|
|
|
|
|
{
|
|
|
|
|
_store.Add(1);
|
|
|
|
|
_store.Add(2);
|
|
|
|
|
_store.Add(3);
|
|
|
|
|
_store.Save();
|
|
|
|
|
|
2026-04-12 10:10:58 +01:00
|
|
|
var loaded = new ProcessedUidStore(_tempDir, "TestAccount");
|
2026-04-07 11:39:31 +01:00
|
|
|
Assert.True(loaded.Contains(1));
|
|
|
|
|
Assert.True(loaded.Contains(2));
|
|
|
|
|
Assert.True(loaded.Contains(3));
|
|
|
|
|
Assert.False(loaded.Contains(4));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Prune_RemovesOldEntries()
|
|
|
|
|
{
|
|
|
|
|
_store.Add(1, DateTime.UtcNow.AddDays(-31));
|
|
|
|
|
_store.Add(2, DateTime.UtcNow);
|
|
|
|
|
_store.Prune(TimeSpan.FromDays(30));
|
|
|
|
|
|
|
|
|
|
Assert.False(_store.Contains(1));
|
|
|
|
|
Assert.True(_store.Contains(2));
|
|
|
|
|
}
|
|
|
|
|
}
|