using NATS.Server.JetStream.Models; using NATS.Server.JetStream.Storage; namespace NATS.Server.Tests; public class StreamStoreContractTests { [Fact] public async Task Append_increments_sequence_and_updates_state() { var store = new FakeStreamStore(); var seq = await store.AppendAsync("foo", "bar"u8.ToArray(), default); seq.ShouldBe((ulong)1); (await store.GetStateAsync(default)).Messages.ShouldBe((ulong)1); } private sealed class FakeStreamStore : IStreamStore { private ulong _last; public ValueTask AppendAsync(string subject, ReadOnlyMemory payload, CancellationToken ct) { _last++; return ValueTask.FromResult(_last); } public ValueTask GetStateAsync(CancellationToken ct) => ValueTask.FromResult(new ApiStreamState { Messages = _last }); public ValueTask LoadAsync(ulong sequence, CancellationToken ct) => ValueTask.FromResult(null); public ValueTask LoadLastBySubjectAsync(string subject, CancellationToken ct) => ValueTask.FromResult(null); public ValueTask> ListAsync(CancellationToken ct) => ValueTask.FromResult>([]); public ValueTask RemoveAsync(ulong sequence, CancellationToken ct) => ValueTask.FromResult(false); public ValueTask PurgeAsync(CancellationToken ct) => ValueTask.CompletedTask; public ValueTask CreateSnapshotAsync(CancellationToken ct) => ValueTask.FromResult(Array.Empty()); public ValueTask RestoreSnapshotAsync(ReadOnlyMemory snapshot, CancellationToken ct) => ValueTask.CompletedTask; } }