Files
SpamGuard/tests/SpamGuard.Tests/State/TrustedSenderStoreTests.cs

80 lines
2.0 KiB
C#

// tests/SpamGuard.Tests/State/TrustedSenderStoreTests.cs
namespace SpamGuard.Tests.State;
using SpamGuard.State;
public class TrustedSenderStoreTests : IDisposable
{
private readonly string _tempDir;
private readonly TrustedSenderStore _store;
public TrustedSenderStoreTests()
{
_tempDir = Path.Combine(Path.GetTempPath(), $"spamguard-test-{Guid.NewGuid()}");
Directory.CreateDirectory(_tempDir);
_store = new TrustedSenderStore(_tempDir);
}
public void Dispose()
{
if (Directory.Exists(_tempDir))
Directory.Delete(_tempDir, true);
}
[Fact]
public void IsTrusted_ReturnsFalse_WhenEmpty()
{
Assert.False(_store.IsTrusted("someone@example.com"));
}
[Fact]
public void IsTrusted_ReturnsTrue_AfterAdd()
{
_store.Add("someone@example.com");
Assert.True(_store.IsTrusted("someone@example.com"));
}
[Fact]
public void IsTrusted_IsCaseInsensitive()
{
_store.Add("Someone@Example.COM");
Assert.True(_store.IsTrusted("someone@example.com"));
}
[Fact]
public void IsTrusted_TrimsWhitespace()
{
_store.Add(" someone@example.com ");
Assert.True(_store.IsTrusted("someone@example.com"));
}
[Fact]
public void AddRange_AddsMultiple()
{
_store.AddRange(["a@b.com", "c@d.com", "e@f.com"]);
Assert.True(_store.IsTrusted("a@b.com"));
Assert.True(_store.IsTrusted("c@d.com"));
Assert.True(_store.IsTrusted("e@f.com"));
}
[Fact]
public void Save_And_Load_RoundTrips()
{
_store.Add("a@b.com");
_store.Add("c@d.com");
_store.Save();
var loaded = new TrustedSenderStore(_tempDir);
Assert.True(loaded.IsTrusted("a@b.com"));
Assert.True(loaded.IsTrusted("c@d.com"));
Assert.False(loaded.IsTrusted("x@y.com"));
}
[Fact]
public void Count_ReturnsCorrectValue()
{
_store.AddRange(["a@b.com", "c@d.com"]);
Assert.Equal(2, _store.Count);
}
}