Files
SpamGuard/tests/SpamGuard.Tests/State/ProcessedUidStoreTests.cs
2026-04-07 11:39:31 +01:00

71 lines
1.7 KiB
C#

// 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);
_store = new ProcessedUidStore(_tempDir);
}
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();
var loaded = new ProcessedUidStore(_tempDir);
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));
}
}