Skip to content

Commit

Permalink
added stream version
Browse files Browse the repository at this point in the history
  • Loading branch information
mizrael committed Feb 17, 2024
1 parent 9903576 commit b98bf56
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 4 deletions.
4 changes: 3 additions & 1 deletion src/EvenireDB.Server/Routes/StreamsRoutes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ private static async ValueTask<IResult> SaveEvents(
[FromServices] EventMapper mapper,
[FromServices] IEventsWriter writer,
Guid streamId,
[FromQuery(Name = "version")] int? expectedVersion,
[FromBody] EventDataDTO[]? dtos)
{
if(dtos is null)
Expand All @@ -49,10 +50,11 @@ private static async ValueTask<IResult> SaveEvents(
return Results.BadRequest();
}

var result = await writer.AppendAsync(streamId, events);
var result = await writer.AppendAsync(streamId, events, expectedVersion);
return result switch
{
FailureResult { Code: ErrorCodes.DuplicateEvent } d => Results.Conflict(d.Message),
FailureResult { Code: ErrorCodes.VersionMismatch } d => Results.BadRequest(d.Message),
FailureResult => Results.StatusCode(500),
_ => Results.AcceptedAtRoute(nameof(GetEvents), new { streamId })
};
Expand Down
4 changes: 2 additions & 2 deletions tests/EvenireDB.Server.Tests/GrpcTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public async Task Post_should_return_bad_request_when_input_too_big()
public async Task Post_should_return_version_mismatch_when_stream_version_mismatch()
{
var streamId = Guid.NewGuid();
var dtos = BuildEventDataDTOs(1, new byte[500_001]); //TODO: from config
var dtos = BuildEventDataDTOs(10, new byte[500_001]); //TODO: from config

var channel = _serverFixture.CreateGrpcChannel();
var client = new EventsGrpcService.EventsGrpcServiceClient(channel);
Expand All @@ -89,7 +89,7 @@ public async Task Post_should_return_version_mismatch_when_stream_version_mismat
var req2 = new AppendRequest()
{
StreamId = streamId.ToString(),
ExpectedVersion = 71
ExpectedVersion = 42
};
req2.Events.AddRange(dtos);
var response = await client.AppendAsync(req2);
Expand Down
16 changes: 16 additions & 0 deletions tests/EvenireDB.Server.Tests/Routes/EventsV1EndpointTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,22 @@ public async Task Post_should_return_accepted_when_input_valid()
response.StatusCode.Should().Be(System.Net.HttpStatusCode.Accepted);
}

[Fact]
public async Task Post_should_return_bad_request_when_stream_version_mismatch()
{
var streamId = Guid.NewGuid();

var dtos = BuildEventsDTOs(10, _defaultEventData);

await using var application = _serverFixture.CreateServer();
using var client = application.CreateClient();
var response = await client.PostAsJsonAsync($"/api/v1/streams/{streamId}/events", dtos);
response.StatusCode.Should().Be(System.Net.HttpStatusCode.Accepted);

var response2 = await client.PostAsJsonAsync($"/api/v1/streams/{streamId}/events?version=2", dtos);
response2.StatusCode.Should().Be(System.Net.HttpStatusCode.BadRequest);
}

[Fact]
public async Task Post_should_create_events()
{
Expand Down
1 change: 0 additions & 1 deletion tests/EvenireDB.Tests/EventsWriterTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using EvenireDB.Common;
using EvenireDB.Utils;
using Microsoft.Extensions.Logging;
using System.Threading.Channels;

Expand Down

0 comments on commit b98bf56

Please sign in to comment.