Skip to content
This repository was archived by the owner on Sep 3, 2024. It is now read-only.

Commit 43e992c

Browse files
Merge pull request #32 from thefringeninja/delete-stream-message-by-id
Delete Stream Message by Id
2 parents b59e533 + 6ae8435 commit 43e992c

3 files changed

Lines changed: 36 additions & 3 deletions

File tree

src/SqlStreamStore.HAL.Tests/StreamDeleteTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ public async Task expected_version(int? expectedVersion)
3333

3434
using(var response = await _fixture.HttpClient.SendAsync(request))
3535
{
36-
response.StatusCode.ShouldBe(HttpStatusCode.NoContent);
36+
response.StatusCode.ShouldBe(HttpStatusCode.NoContent);
37+
response.Content.Headers.ContentLength.HasValue.ShouldBeTrue();
38+
response.Content.Headers.ContentLength.Value.ShouldBe(0);
3739
}
3840

3941
var page = await _fixture.StreamStore.ReadStreamForwards(StreamId, 0, 1);

src/SqlStreamStore.HAL.Tests/StreamMessageTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Net.Http.Headers;
66
using System.Threading.Tasks;
77
using Shouldly;
8+
using SqlStreamStore.Streams;
89
using Xunit;
910

1011
public class StreamMessageTests : IDisposable
@@ -73,6 +74,8 @@ public async Task delete_single_message_by_version()
7374
using(var response = await _fixture.HttpClient.DeleteAsync("/streams/a-stream/0"))
7475
{
7576
response.StatusCode.ShouldBe(HttpStatusCode.NoContent);
77+
response.Content.Headers.ContentLength.HasValue.ShouldBeTrue();
78+
response.Content.Headers.ContentLength.Value.ShouldBe(0);
7679
}
7780

7881
using(var response = await _fixture.HttpClient.GetAsync("/streams/a-stream/0"))
@@ -81,5 +84,29 @@ public async Task delete_single_message_by_version()
8184
response.Headers.ETag.ShouldBeNull();
8285
}
8386
}
87+
88+
[Fact]
89+
public async Task delete_single_message_by_message_id()
90+
{
91+
var writeResult = await _fixture.WriteNMessages("a-stream", 1);
92+
93+
var page = await _fixture.StreamStore.ReadStreamForwards("a-stream", StreamVersion.Start, 1);
94+
95+
var messageId = page.Messages[0].MessageId;
96+
97+
using(var response = await _fixture.HttpClient.DeleteAsync($"/streams/a-stream/{messageId}"))
98+
{
99+
response.StatusCode.ShouldBe(HttpStatusCode.NoContent);
100+
response.Content.Headers.ContentLength.HasValue.ShouldBeTrue();
101+
response.Content.Headers.ContentLength.Value.ShouldBe(0);
102+
}
103+
104+
using(var response = await _fixture.HttpClient.GetAsync("/streams/a-stream/0"))
105+
{
106+
response.StatusCode.ShouldBe(HttpStatusCode.NotFound);
107+
response.Headers.ETag.ShouldBeNull();
108+
}
109+
}
110+
84111
}
85112
}

src/SqlStreamStore.HAL/StreamMessage/StreamMessageMiddleware.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ namespace SqlStreamStore.HAL.StreamMessage
1212

1313
internal static class StreamMessageMiddleware
1414
{
15-
public static IApplicationBuilder UseStreamMessages(this IApplicationBuilder builder, StreamMessageResource streamMessages)
15+
public static IApplicationBuilder UseStreamMessages(
16+
this IApplicationBuilder builder,
17+
StreamMessageResource streamMessages)
1618
=> builder.MapWhen(IsMatch, Configure(streamMessages));
1719

1820
private static bool IsMatch(HttpContext context)
@@ -27,7 +29,9 @@ public static bool IsStreamMessage(this PathString requestPath)
2729

2830
var segments = requestPath.Value?.Split('/');
2931

30-
return segments?.Length == 4 && int.TryParse(segments[3], out _);
32+
return segments?.Length == 4
33+
&& (int.TryParse(segments[3], out _)
34+
|| Guid.TryParse(segments[3], out _));
3135
}
3236

3337
private static Action<IApplicationBuilder> Configure(StreamMessageResource streamMessages)

0 commit comments

Comments
 (0)