Skip to content

Commit f41ae45

Browse files
committed
💁
1 parent c9acb4c commit f41ae45

File tree

16 files changed

+74
-122
lines changed

16 files changed

+74
-122
lines changed

samples/CommandQuery.Sample.AWSLambda.Tests/CommandTests.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ public async Task should_work()
2626
{
2727
var request = GetRequest("{ 'Value': 'Foo' }");
2828
var context = new TestLambdaContext();
29-
3029
var result = await Subject.Post(request, context, "FooCommand");
31-
3230
result.Should().NotBeNull();
3331
}
3432

@@ -37,9 +35,7 @@ public async Task should_handle_errors()
3735
{
3836
var request = GetRequest("{ 'Value': 'Foo' }");
3937
var context = new TestLambdaContext();
40-
4138
var result = await Subject.Post(request, context, "FailCommand");
42-
4339
result.ShouldBeError("The command type 'FailCommand' could not be found");
4440
}
4541

samples/CommandQuery.Sample.AWSLambda.Tests/QueryTests.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ public async Task should_work()
3030
{
3131
var result = await Subject.Post(Request, Context, "BarQuery");
3232
var value = result.As<Bar>()!;
33-
3433
value.Id.Should().Be(1);
3534
value.Value.Should().NotBeEmpty();
3635
}
@@ -39,7 +38,6 @@ public async Task should_work()
3938
public async Task should_handle_errors()
4039
{
4140
var result = await Subject.Post(Request, Context, "FailQuery");
42-
4341
result.ShouldBeError("The query type 'FailQuery' could not be found");
4442
}
4543

@@ -67,7 +65,6 @@ public async Task should_work()
6765
{
6866
var result = await Subject.Get(Request, Context, "BarQuery");
6967
var value = result.As<Bar>()!;
70-
7168
value.Id.Should().Be(1);
7269
value.Value.Should().NotBeEmpty();
7370
}
@@ -76,7 +73,6 @@ public async Task should_work()
7673
public async Task should_handle_errors()
7774
{
7875
var result = await Subject.Get(Request, Context, "FailQuery");
79-
8076
result.ShouldBeError("The query type 'FailQuery' could not be found");
8177
}
8278

samples/CommandQuery.Sample.AWSLambda.Tests/ShouldExtensions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,14 @@ public static void ShouldBeError(this APIGatewayProxyResponse result, string mes
1111
{
1212
result.Should().NotBeNull();
1313
result.StatusCode.Should().NotBe(200);
14-
var value = JsonSerializer.Deserialize<Error>(result.Body)!;
14+
var value = result.As<Error>()!;
1515
value.Should().NotBeNull();
1616
value.Message.Should().Be(message);
1717
}
18+
19+
public static T? As<T>(this APIGatewayProxyResponse result)
20+
{
21+
return JsonSerializer.Deserialize<T>(result.Body);
22+
}
1823
}
1924
}

samples/CommandQuery.Sample.AWSLambda.Tests/TestExtensions.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.

samples/CommandQuery.Sample.AWSLambda/Command.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ public class Command(ICommandFunction commandFunction)
1010
{
1111
[LambdaFunction(Policies = "AWSLambdaBasicExecutionRole", MemorySize = 256, Timeout = 30)]
1212
[RestApi(LambdaHttpMethod.Post, "/command/{commandName}")]
13-
public async Task<APIGatewayProxyResponse> Post(APIGatewayProxyRequest request, ILambdaContext context, string commandName) =>
13+
public async Task<APIGatewayProxyResponse> Post(
14+
APIGatewayProxyRequest request,
15+
ILambdaContext context,
16+
string commandName) =>
1417
await commandFunction.HandleAsync(commandName, request, context.Logger);
1518
}

samples/CommandQuery.Sample.AWSLambda/Query.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,18 @@ public class Query(IQueryFunction queryFunction)
1010
{
1111
[LambdaFunction(Policies = "AWSLambdaBasicExecutionRole", MemorySize = 256, Timeout = 30)]
1212
[RestApi(LambdaHttpMethod.Get, "/query/{queryName}")]
13-
public async Task<APIGatewayProxyResponse> Get(APIGatewayProxyRequest request, ILambdaContext context, string queryName) =>
13+
public async Task<APIGatewayProxyResponse> Get(
14+
APIGatewayProxyRequest request,
15+
ILambdaContext context,
16+
string queryName) =>
1417
await queryFunction.HandleAsync(queryName, request, context.Logger);
1518

1619
[LambdaFunction(Policies = "AWSLambdaBasicExecutionRole", MemorySize = 256, Timeout = 30)]
1720
[RestApi(LambdaHttpMethod.Post, "/query/{queryName}")]
18-
public async Task<APIGatewayProxyResponse> Post(APIGatewayProxyRequest request, ILambdaContext context, string queryName) =>
21+
public async Task<APIGatewayProxyResponse> Post(
22+
APIGatewayProxyRequest request,
23+
ILambdaContext context,
24+
string queryName) =>
1925
await queryFunction.HandleAsync(queryName, request, context.Logger);
2026
}
2127
}

samples/CommandQuery.Sample.AspNetCore.Tests/CommandControllerTests.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ public void TearDown()
2828
public async Task should_work()
2929
{
3030
var content = new StringContent("{ \"Value\": \"Foo\" }", Encoding.UTF8, "application/json");
31-
3231
var result = await Client.PostAsync("/api/command/FooCommand", content);
33-
3432
result.EnsureSuccessStatusCode();
3533
(await result.Content.ReadAsStringAsync()).Should().BeEmpty();
3634
}
@@ -39,9 +37,7 @@ public async Task should_work()
3937
public async Task should_handle_errors()
4038
{
4139
var content = new StringContent("{ \"Value\": \"Foo\" }", Encoding.UTF8, "application/json");
42-
4340
var result = await Client.PostAsync("/api/command/FailCommand", content);
44-
4541
result.StatusCode.Should().Be(HttpStatusCode.NotFound);
4642
(await result.Content.ReadAsStringAsync()).Should().BeEmpty();
4743
}

samples/CommandQuery.Sample.AspNetCore.Tests/QueryControllerTests.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,8 @@ public void TearDown()
2929
public async Task should_work()
3030
{
3131
var content = new StringContent("{ \"Id\": 1 }", Encoding.UTF8, "application/json");
32-
3332
var result = await Client.PostAsync("/api/query/BarQuery", content);
3433
var value = await result.Content.ReadAsAsync<Bar>();
35-
3634
result.EnsureSuccessStatusCode();
3735
value.Id.Should().Be(1);
3836
value.Value.Should().NotBeEmpty();
@@ -42,9 +40,7 @@ public async Task should_work()
4240
public async Task should_handle_errors()
4341
{
4442
var content = new StringContent("{ \"Id\": 1 }", Encoding.UTF8, "application/json");
45-
4643
var result = await Client.PostAsync("/api/query/FailQuery", content);
47-
4844
result.StatusCode.Should().Be(HttpStatusCode.NotFound);
4945
(await result.Content.ReadAsStringAsync()).Should().BeEmpty();
5046
}
@@ -74,7 +70,6 @@ public async Task should_work()
7470
{
7571
var result = await Client.GetAsync("/api/query/BarQuery?Id=1");
7672
var value = await result.Content.ReadAsAsync<Bar>();
77-
7873
result.EnsureSuccessStatusCode();
7974
value.Id.Should().Be(1);
8075
value.Value.Should().NotBeEmpty();
@@ -84,7 +79,6 @@ public async Task should_work()
8479
public async Task should_handle_errors()
8580
{
8681
var result = await Client.GetAsync("/api/query/FailQuery?Id=1");
87-
8882
result.StatusCode.Should().Be(HttpStatusCode.NotFound);
8983
(await result.Content.ReadAsStringAsync()).Should().BeEmpty();
9084
}

samples/CommandQuery.Sample.AzureFunctions.Tests/CommandTests.cs

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System.Text;
22
using CommandQuery.AzureFunctions;
33
using FluentAssertions;
4+
using Microsoft.AspNetCore.Http;
45
using Microsoft.Azure.Functions.Worker;
5-
using Microsoft.Azure.Functions.Worker.Http;
66
using Microsoft.Extensions.DependencyInjection;
77
using Microsoft.Extensions.Logging;
88
using Moq;
@@ -32,38 +32,23 @@ public void SetUp()
3232
[Test]
3333
public async Task should_work()
3434
{
35-
var req = GetHttpRequestData("{ \"Value\": \"Foo\" }");
36-
35+
var req = GetHttpRequest("{ \"Value\": \"Foo\" }");
3736
var result = await Subject.Run(req, ExecutionContext, "FooCommand");
38-
3937
result.Should().NotBeNull();
4038
}
4139

4240
[Test]
4341
public async Task should_handle_errors()
4442
{
45-
var req = GetHttpRequestData("{ \"Value\": \"Foo\" }");
46-
43+
var req = GetHttpRequest("{ \"Value\": \"Foo\" }");
4744
var result = await Subject.Run(req, ExecutionContext, "FailCommand");
48-
49-
await result.ShouldBeErrorAsync("The command type 'FailCommand' could not be found");
45+
result.ShouldBeError("The command type 'FailCommand' could not be found");
5046
}
5147

52-
HttpRequestData GetHttpRequestData(string content)
48+
HttpRequest GetHttpRequest(string content)
5349
{
54-
var stream = new MemoryStream(Encoding.UTF8.GetBytes(content));
55-
56-
var request = new Mock<HttpRequestData>(ExecutionContext);
57-
request.Setup(r => r.Body).Returns(stream);
58-
request.Setup(r => r.CreateResponse()).Returns(() =>
59-
{
60-
var response = new Mock<HttpResponseData>(ExecutionContext);
61-
response.SetupProperty(r => r.Headers, new HttpHeadersCollection());
62-
response.SetupProperty(r => r.StatusCode);
63-
response.SetupProperty(r => r.Body, new MemoryStream());
64-
return response.Object;
65-
});
66-
50+
var request = new Mock<HttpRequest>();
51+
request.Setup(r => r.Body).Returns(new MemoryStream(Encoding.UTF8.GetBytes(content)));
6752
return request.Object;
6853
}
6954

samples/CommandQuery.Sample.AzureFunctions.Tests/QueryTests.cs

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
using System.Text;
2+
using System.Web;
23
using CommandQuery.AzureFunctions;
34
using CommandQuery.Sample.Contracts.Queries;
45
using FluentAssertions;
6+
using Microsoft.AspNetCore.Http;
57
using Microsoft.Azure.Functions.Worker;
6-
using Microsoft.Azure.Functions.Worker.Http;
78
using Microsoft.Extensions.DependencyInjection;
89
using Microsoft.Extensions.Logging;
10+
using Microsoft.Extensions.Primitives;
911
using Moq;
1012
using NUnit.Framework;
1113

@@ -33,23 +35,19 @@ public void SetUp()
3335
[Test]
3436
public async Task should_work()
3537
{
36-
var req = GetHttpRequestData(ExecutionContext, "POST", content: "{ \"Id\": 1 }");
37-
38+
var req = GetHttpRequest("POST", content: "{ \"Id\": 1 }");
3839
var result = await Subject.Run(req, ExecutionContext, "BarQuery");
39-
var value = await result.AsAsync<Bar>();
40-
40+
var value = result.As<Bar>();
4141
value!.Id.Should().Be(1);
4242
value.Value.Should().NotBeEmpty();
4343
}
4444

4545
[Test]
4646
public async Task should_handle_errors()
4747
{
48-
var req = GetHttpRequestData(ExecutionContext, "POST", content: "{ \"Id\": 1 }");
49-
48+
var req = GetHttpRequest("POST", content: "{ \"Id\": 1 }");
5049
var result = await Subject.Run(req, ExecutionContext, "FailQuery");
51-
52-
await result.ShouldBeErrorAsync("The query type 'FailQuery' could not be found");
50+
result.ShouldBeError("The query type 'FailQuery' could not be found");
5351
}
5452

5553
FunctionContext ExecutionContext = null!;
@@ -76,54 +74,42 @@ public void SetUp()
7674
[Test]
7775
public async Task should_work()
7876
{
79-
var req = GetHttpRequestData(ExecutionContext, "GET", url: "http://localhost?Id=1");
80-
77+
var req = GetHttpRequest("GET", query: "?Id=1");
8178
var result = await Subject.Run(req, ExecutionContext, "BarQuery");
82-
var value = await result.AsAsync<Bar>();
83-
79+
var value = result.As<Bar>();
8480
value!.Id.Should().Be(1);
8581
value.Value.Should().NotBeEmpty();
8682
}
8783

8884
[Test]
8985
public async Task should_handle_errors()
9086
{
91-
var req = GetHttpRequestData(ExecutionContext, "GET", url: "http://localhost?Id=1");
92-
87+
var req = GetHttpRequest("GET", query: "?Id=1");
9388
var result = await Subject.Run(req, ExecutionContext, "FailQuery");
94-
95-
await result.ShouldBeErrorAsync("The query type 'FailQuery' could not be found");
89+
result.ShouldBeError("The query type 'FailQuery' could not be found");
9690
}
9791

9892
FunctionContext ExecutionContext = null!;
9993
Query Subject = null!;
10094
}
10195

102-
static HttpRequestData GetHttpRequestData(FunctionContext executionContext, string method, string? content = null, string? url = null)
96+
static HttpRequest GetHttpRequest(string method, string? content = null, string? query = null)
10397
{
104-
var request = new Mock<HttpRequestData>(executionContext);
98+
var request = new Mock<HttpRequest>();
10599
request.Setup(r => r.Method).Returns(method);
106100

107101
if (content != null)
108102
{
109-
var stream = new MemoryStream(Encoding.UTF8.GetBytes(content));
110-
request.Setup(r => r.Body).Returns(stream);
103+
request.Setup(r => r.Body).Returns(new MemoryStream(Encoding.UTF8.GetBytes(content)));
111104
}
112105

113-
if (url != null)
106+
if (query != null)
114107
{
115-
request.Setup(r => r.Url).Returns(new Uri(url));
108+
var collection = HttpUtility.ParseQueryString(query);
109+
var store = collection.AllKeys.ToDictionary(k => k!, k => new StringValues(collection.GetValues(k)));
110+
request.Setup(r => r.Query).Returns(new QueryCollection(store));
116111
}
117112

118-
request.Setup(r => r.CreateResponse()).Returns(() =>
119-
{
120-
var response = new Mock<HttpResponseData>(executionContext);
121-
response.SetupProperty(r => r.Headers, new HttpHeadersCollection());
122-
response.SetupProperty(r => r.StatusCode);
123-
response.SetupProperty(r => r.Body, new MemoryStream());
124-
return response.Object;
125-
});
126-
127113
return request.Object;
128114
}
129115
}
Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
1-
using System.Net;
2-
using System.Text.Json;
3-
using CommandQuery.Sample.Contracts;
41
using FluentAssertions;
5-
using Microsoft.Azure.Functions.Worker.Http;
2+
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.AspNetCore.Mvc.Infrastructure;
64

75
namespace CommandQuery.Sample.AzureFunctions.Tests
86
{
97
public static class ShouldExtensions
108
{
11-
public static async Task ShouldBeErrorAsync(this HttpResponseData result, string message)
9+
public static void ShouldBeError(this IActionResult result, string message, int? statusCode = null)
1210
{
1311
result.Should().NotBeNull();
14-
result.StatusCode.Should().NotBe(HttpStatusCode.OK);
15-
result.Body.Position = 0;
16-
var value = await JsonSerializer.DeserializeAsync<Error>(result.Body);
12+
13+
var resultWithStatusCode = result as IStatusCodeActionResult;
14+
resultWithStatusCode.StatusCode.Should().NotBe(200);
15+
if (statusCode.HasValue) resultWithStatusCode.StatusCode.Should().Be(statusCode);
16+
17+
var value = result.As<IError>()!;
1718
value.Should().NotBeNull();
18-
value!.Message.Should().Be(message);
19+
value.Message.Should().Be(message);
20+
}
21+
22+
public static T? As<T>(this IActionResult result)
23+
{
24+
return (T)(result as ObjectResult).Value;
1925
}
2026
}
2127
}

samples/CommandQuery.Sample.AzureFunctions.Tests/TestExtensions.cs

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)