diff --git a/src/Odyssey/InMemoryEventStore.cs b/src/Odyssey/InMemoryEventStore.cs index eeaae9b..710dd16 100644 --- a/src/Odyssey/InMemoryEventStore.cs +++ b/src/Odyssey/InMemoryEventStore.cs @@ -105,4 +105,22 @@ public Task> ReadStream(string streamId, ReadDire return Task.FromResult>(stream[(int)eventNumber]); } + + /// + /// Deletes the stream with the specified stream identifier + /// + /// + /// + public bool DeleteStream(string streamId) + { + return _streams.TryRemove(streamId, out _); + } + + /// + /// Resets the entire in-memory store, clearing all streams + /// + public void Reset() + { + _streams.Clear(); + } } \ No newline at end of file diff --git a/test/Odyssey.Tests/InMemoryEventStoreTests.cs b/test/Odyssey.Tests/InMemoryEventStoreTests.cs index f7ee3ba..123eab9 100644 --- a/test/Odyssey.Tests/InMemoryEventStoreTests.cs +++ b/test/Odyssey.Tests/InMemoryEventStoreTests.cs @@ -69,6 +69,20 @@ public async Task Can_read_stream_backwards() events.Last().EventNumber.ShouldBe(0); } + [Fact] + public async Task Can_remove_stream() + { + var streamId = Guid.NewGuid().ToString(); + await _eventStore.AppendToStream(streamId, new[] { Map(new TestEvent()) }, StreamState.NoStream); + + var events = await _eventStore.ReadStream(streamId, ReadDirection.Backwards, StreamPosition.Start); + events.Count().ShouldBe(1); + + _eventStore.DeleteStream(streamId); + events = await _eventStore.ReadStream(streamId, ReadDirection.Backwards, StreamPosition.Start); + events.Count.ShouldBe(0); + } + static EventData Map(TEvent @event) => new(Guid.NewGuid(), @event!.GetType().Name, @event);