From 8e257c6832af06870e8ad034b0483a3bb297e494 Mon Sep 17 00:00:00 2001 From: Damian Hickey Date: Sun, 20 May 2018 21:34:13 +0200 Subject: [PATCH 1/2] Add test to set $deleted metadata --- ...reamStoreAcceptanceTests.StreamMetadata.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/SqlStreamStore.AcceptanceTests/SqlStreamStoreAcceptanceTests.StreamMetadata.cs b/src/SqlStreamStore.AcceptanceTests/SqlStreamStoreAcceptanceTests.StreamMetadata.cs index a951af69d..9032f07cb 100644 --- a/src/SqlStreamStore.AcceptanceTests/SqlStreamStoreAcceptanceTests.StreamMetadata.cs +++ b/src/SqlStreamStore.AcceptanceTests/SqlStreamStoreAcceptanceTests.StreamMetadata.cs @@ -300,5 +300,26 @@ await store } } } + + [Fact] + public async Task Can_set_deleted_stream_metadata() + { + using (var fixture = GetFixture()) + { + using (var store = await fixture.GetStreamStore()) + { + const string streamId = Deleted.DeletedStreamId; + await store + .SetStreamMetadata(streamId, maxCount: 2, maxAge: 30); + + var metadata = await store.GetStreamMetadata(streamId); + + metadata.MetadataStreamVersion.ShouldBe(0); + metadata.MaxAge.ShouldBe(30); + metadata.MaxCount.ShouldBe(2); + metadata.MetadataJson.ShouldBeNull(); + } + } + } } } From 0163392d7cc30765f6da7e39a6d12ffae595e71f Mon Sep 17 00:00:00 2001 From: Damian Hickey Date: Sun, 20 May 2018 21:37:39 +0200 Subject: [PATCH 2/2] On SetStreamMetadata and GetStreamMetadata relax the guard clauses to allow setting the stream metadata for $deleted (Deleted.DeletedStreamId). --- .../Infrastructure/ReadonlyStreamStoreBase.cs | 6 +++++- src/SqlStreamStore/Infrastructure/StreamStoreBase.cs | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/SqlStreamStore/Infrastructure/ReadonlyStreamStoreBase.cs b/src/SqlStreamStore/Infrastructure/ReadonlyStreamStoreBase.cs index 56a003e18..3bca99082 100644 --- a/src/SqlStreamStore/Infrastructure/ReadonlyStreamStoreBase.cs +++ b/src/SqlStreamStore/Infrastructure/ReadonlyStreamStoreBase.cs @@ -208,7 +208,11 @@ public Task GetStreamMetadata( string streamId, CancellationToken cancellationToken = default) { - Ensure.That(streamId, nameof(streamId)).IsNotNullOrWhiteSpace().DoesNotStartWith("$"); + if (streamId == null) throw new ArgumentNullException(nameof(streamId)); + if (streamId.StartsWith("$") && streamId != Deleted.DeletedStreamId) + { + throw new ArgumentException("Must not start with '$'", nameof(streamId)); + } if (Logger.IsDebugEnabled()) { diff --git a/src/SqlStreamStore/Infrastructure/StreamStoreBase.cs b/src/SqlStreamStore/Infrastructure/StreamStoreBase.cs index 7fcc4935e..6bcdfe1a9 100644 --- a/src/SqlStreamStore/Infrastructure/StreamStoreBase.cs +++ b/src/SqlStreamStore/Infrastructure/StreamStoreBase.cs @@ -98,7 +98,12 @@ public Task SetStreamMetadata( string metadataJson = null, CancellationToken cancellationToken = default) { - Ensure.That(streamId.Value, nameof(streamId)).DoesNotStartWith("$"); + if(streamId == null) throw new ArgumentNullException(nameof(streamId)); + if(streamId.Value.StartsWith("$") && streamId.Value != Deleted.DeletedStreamId) + { + throw new ArgumentException("Must not start with '$'", nameof(streamId)); + } + Ensure.That(expectedStreamMetadataVersion, nameof(expectedStreamMetadataVersion)).IsGte(-2); if (Logger.IsDebugEnabled())