diff --git a/SeaHavenIndustries.Tests/PasswordResetAbuseLimitsTests.cs b/SeaHavenIndustries.Tests/PasswordResetAbuseLimitsTests.cs index 9fd8388..9835a85 100644 --- a/SeaHavenIndustries.Tests/PasswordResetAbuseLimitsTests.cs +++ b/SeaHavenIndustries.Tests/PasswordResetAbuseLimitsTests.cs @@ -123,7 +123,7 @@ public sealed class PasswordResetAbuseLimitsTests [Fact] public void Concurrent_checks_can_never_exceed_the_account_budget() { - var throttle = new InMemoryPasswordResetThrottle(new ManualTimeProvider()); + var throttle = new InMemoryPasswordResetThrottle(new ResetTestClock()); var reserved = 0; Parallel.For(0, 64, _ => @@ -138,7 +138,7 @@ public sealed class PasswordResetAbuseLimitsTests [Fact] public void A_matching_check_gives_its_reservation_back() { - var throttle = new InMemoryPasswordResetThrottle(new ManualTimeProvider()); + var throttle = new InMemoryPasswordResetThrottle(new ResetTestClock()); for (var check = 0; check < 50; check++) { diff --git a/SeaHavenIndustries.Tests/PasswordResetTestHost.cs b/SeaHavenIndustries.Tests/PasswordResetTestHost.cs index 58ea020..e8e6812 100644 --- a/SeaHavenIndustries.Tests/PasswordResetTestHost.cs +++ b/SeaHavenIndustries.Tests/PasswordResetTestHost.cs @@ -46,9 +46,9 @@ internal sealed class PasswordResetTestHost : IAsyncDisposable } public HttpClient Client { get; } - public CapturingEmailSender Sent { get; private init; } = null!; - public ManualTimeProvider Time { get; private init; } = null!; - public CapturingLoggerProvider Logged { get; private init; } = null!; + public ResetEmailOutbox Sent { get; private init; } = null!; + public ResetTestClock Time { get; private init; } = null!; + public ResetLogCapture Logged { get; private init; } = null!; public IServiceProvider Services => _app.Services; public static async Task StartAsync(IEmailSender? emailSender = null, Action? configureServices = null) @@ -56,9 +56,9 @@ internal sealed class PasswordResetTestHost : IAsyncDisposable var databasePath = Path.Combine(Path.GetTempPath(), $"password-reset-{Guid.NewGuid():N}.db"); var connectionString = new SqliteConnectionStringBuilder { DataSource = databasePath, DefaultTimeout = 30 }.ToString(); - var sent = new CapturingEmailSender(); - var time = new ManualTimeProvider(); - var logged = new CapturingLoggerProvider(); + var sent = new ResetEmailOutbox(); + var time = new ResetTestClock(); + var logged = new ResetLogCapture(); var builder = WebApplication.CreateBuilder(new WebApplicationOptions { EnvironmentName = "Testing" }); builder.WebHost.UseUrls("http://127.0.0.1:0"); @@ -258,7 +258,7 @@ internal sealed class PasswordResetTestHost : IAsyncDisposable } } -internal sealed class ManualTimeProvider : TimeProvider +internal sealed class ResetTestClock : TimeProvider { private DateTimeOffset _now = new(2026, 9, 25, 12, 0, 0, TimeSpan.Zero); @@ -267,7 +267,7 @@ internal sealed class ManualTimeProvider : TimeProvider public void Advance(TimeSpan by) => _now = _now.Add(by); } -internal sealed class CapturingEmailSender : IEmailSender +internal sealed class ResetEmailOutbox : IEmailSender { private static readonly Regex CodePattern = new(@"Your Password Reset Code is: (\d{6})", RegexOptions.CultureInvariant); @@ -286,7 +286,7 @@ internal sealed class CapturingEmailSender : IEmailSender } } -internal sealed class CapturingLoggerProvider : ILoggerProvider +internal sealed class ResetLogCapture : ILoggerProvider { public ConcurrentQueue Lines { get; } = new(); @@ -298,10 +298,10 @@ internal sealed class CapturingLoggerProvider : ILoggerProvider private sealed class CapturingLogger : ILogger { - private readonly CapturingLoggerProvider _owner; + private readonly ResetLogCapture _owner; private readonly string _category; - public CapturingLogger(CapturingLoggerProvider owner, string category) + public CapturingLogger(ResetLogCapture owner, string category) { _owner = owner; _category = category;