using EventSubscriber.Application; namespace EventSubscriber.Tests; /// In-memory stand-ins for the projection store and notification log, so the /// projector's behaviour is exercised without Postgres (hand-written stubs, the repo's /// convention — no mocking library). internal sealed class InMemoryNotificationLog : INotificationLog { private readonly Dictionary _byKey = []; public Task TryRecordAsync(RecordedNotification notification, CancellationToken ct = default) => Task.FromResult(_byKey.TryAdd(notification.Key, notification)); public Task> AllAsync(CancellationToken ct = default) => Task.FromResult>([.. _byKey.Values]); } internal sealed class InMemoryProjectionStore : IProjectionStore { private readonly Dictionary _byId = []; public Task UpsertAsync(RegisterEntry entry, CancellationToken ct = default) { _byId[entry.Id] = entry; return Task.CompletedTask; } public Task ClearAsync(CancellationToken ct = default) { _byId.Clear(); return Task.CompletedTask; } public Task> AllAsync(CancellationToken ct = default) => Task.FromResult>([.. _byId.Values]); }