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

Commit aa53c95

Browse files
testing this too as it's not really a conflict with an existing resource but rather bad input
1 parent fab2bec commit aa53c95

2 files changed

Lines changed: 57 additions & 0 deletions

File tree

src/SqlStreamStore.HAL.Tests/StreamAppendTests.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Net;
77
using System.Net.Http;
88
using System.Net.Http.Headers;
9+
using System.Reflection;
910
using System.Threading.Tasks;
1011
using Newtonsoft.Json.Linq;
1112
using Shouldly;
@@ -280,6 +281,52 @@ public async Task malformed_request_body(string malformedRequest)
280281
}
281282
}
282283

284+
public static IEnumerable<object[]> BadExpectedVersionCases()
285+
{
286+
var random = new Random();
287+
288+
var minimum = (from fieldInfo in typeof(ExpectedVersion)
289+
.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)
290+
where fieldInfo.IsLiteral
291+
&& !fieldInfo.IsInitOnly
292+
&& fieldInfo.FieldType == typeof(int)
293+
select (int) fieldInfo.GetRawConstantValue()).Min() - 1;
294+
295+
yield return new object[] { minimum };
296+
for(var i = 0; i < 5; i++)
297+
{
298+
yield return new object[] { random.Next(int.MinValue, minimum) };
299+
}
300+
}
301+
302+
[Theory, MemberData(nameof(BadExpectedVersionCases))]
303+
public async Task bad_expected_version(int badExpectedVersion)
304+
{
305+
using(var response = await _fixture.HttpClient.SendAsync(
306+
new HttpRequestMessage(HttpMethod.Post, $"/streams/{StreamId}")
307+
{
308+
Headers =
309+
{
310+
{Constants.Headers.ExpectedVersion, $"{badExpectedVersion}"}
311+
},
312+
Content = new StringContent(JObject.FromObject(new
313+
{
314+
messageId = Guid.NewGuid(),
315+
jsonData = new { },
316+
type = "type"
317+
}).ToString())
318+
{
319+
Headers =
320+
{
321+
ContentType = new MediaTypeHeaderValue(Constants.MediaTypes.HalJson)
322+
}
323+
}
324+
}))
325+
{
326+
response.StatusCode.ShouldBe(HttpStatusCode.BadRequest);
327+
}
328+
}
329+
283330
public void Dispose() => _fixture.Dispose();
284331
}
285332
}

src/SqlStreamStore.HAL/Streams/StreamResource.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@ public async Task<Response> Post(
2929
AppendStreamOperation operation,
3030
CancellationToken cancellationToken)
3131
{
32+
if(operation.ExpectedVersion < ExpectedVersion.NoStream)
33+
{
34+
return new HalJsonResponse(new HALResponse(new
35+
{
36+
type = typeof(WrongExpectedVersionException).Name,
37+
title = "Wrong expected version.",
38+
detail = $"Expected header '{Constants.Headers.ExpectedVersion}' to have an expected version => {ExpectedVersion.NoStream}."
39+
}), 400);
40+
}
41+
3242
var result = await operation.Invoke(_streamStore, cancellationToken);
3343

3444
var links = Links

0 commit comments

Comments
 (0)