Skip to content

Commit 721ad1f

Browse files
committed
Add tests
1 parent ca5c3d9 commit 721ad1f

File tree

4 files changed

+83
-6
lines changed

4 files changed

+83
-6
lines changed

Source/Boxed.AspNetCore/ApplicationBuilderExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public static IApplicationBuilder UseHttpException(
4141
/// </summary>
4242
/// <param name="application">The application builder.</param>
4343
/// <returns>The same application builder.</returns>
44-
public static IApplicationBuilder UseRequestCancelled(this IApplicationBuilder application) =>
45-
UseRequestCancelled(application, null);
44+
public static IApplicationBuilder UseRequestCanceled(this IApplicationBuilder application) =>
45+
UseRequestCanceled(application, null);
4646

4747
/// <summary>
4848
/// Handles <see cref="OperationCanceledException"/> caused by the HTTP request being aborted, then shortcuts and
@@ -52,7 +52,7 @@ public static IApplicationBuilder UseRequestCancelled(this IApplicationBuilder a
5252
/// <param name="application">The application builder.</param>
5353
/// <param name="configureOptions">The middleware options.</param>
5454
/// <returns>The same application builder.</returns>
55-
public static IApplicationBuilder UseRequestCancelled(
55+
public static IApplicationBuilder UseRequestCanceled(
5656
this IApplicationBuilder application,
5757
Action<RequestCanceledMiddlewareOptions>? configureOptions)
5858
{

Source/Boxed.AspNetCore/LoggerExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ internal static partial class LoggerExtensions
1717
[LoggerMessage(
1818
EventId = 4001,
1919
Level = LogLevel.Information,
20-
Message = "Request was cancelled.")]
21-
public static partial void RequestCancelled(this ILogger logger);
20+
Message = "Request was canceled.")]
21+
public static partial void RequestCanceled(this ILogger logger);
2222
}

Source/Boxed.AspNetCore/Middleware/RequestCanceledMiddleware.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next)
4141
catch (OperationCanceledException operationCanceledException)
4242
when (operationCanceledException.CancellationToken == context.RequestAborted)
4343
{
44-
this.logger.RequestCancelled();
44+
this.logger.RequestCanceled();
4545
context.Response.StatusCode = this.options.StatusCode;
4646
}
4747
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
namespace Boxed.AspNetCore.Test.Middleware;
2+
3+
using System;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using Boxed.AspNetCore.Middleware;
7+
using Microsoft.AspNetCore.Http;
8+
using Microsoft.Extensions.Logging;
9+
using Moq;
10+
using Xunit;
11+
12+
public class RequestCanceledMiddlewareTest
13+
{
14+
private readonly DefaultHttpContext context;
15+
private RequestDelegate next;
16+
17+
public RequestCanceledMiddlewareTest()
18+
{
19+
this.context = new DefaultHttpContext();
20+
this.next = x => Task.CompletedTask;
21+
}
22+
23+
[Fact]
24+
public void InvokeAsync_NullContext_ThrowsArgumentNullException() =>
25+
Assert.ThrowsAsync<ArgumentNullException>(() => new ServerTimingMiddleware().InvokeAsync(null!, this.next));
26+
27+
[Fact]
28+
public void InvokeAsync_NullNext_ThrowsArgumentNullException() =>
29+
Assert.ThrowsAsync<ArgumentNullException>(() => new ServerTimingMiddleware().InvokeAsync(this.context, null!));
30+
31+
[Fact]
32+
public async Task InvokeAsync_RequestNotCanceled_RunsNextMiddlewareAsync()
33+
{
34+
await new RequestCanceledMiddleware(
35+
new RequestCanceledMiddlewareOptions(),
36+
new Mock<ILogger<RequestCanceledMiddleware>>().Object)
37+
.InvokeAsync(this.context, this.next)
38+
.ConfigureAwait(false);
39+
40+
Assert.Equal(200, this.context.Response.StatusCode);
41+
}
42+
43+
[Fact]
44+
public async Task InvokeAsync_OperationCanceledExceptionThrownNotCanceled_RunsNextMiddlewareAsync()
45+
{
46+
using var cancellationTokenSource1 = new CancellationTokenSource();
47+
using var cancellationTokenSource2 = new CancellationTokenSource();
48+
cancellationTokenSource2.Cancel();
49+
this.context.RequestAborted = cancellationTokenSource1.Token;
50+
this.next = x => Task.FromException(new OperationCanceledException(cancellationTokenSource2.Token));
51+
52+
await Assert
53+
.ThrowsAsync<OperationCanceledException>(() =>
54+
new RequestCanceledMiddleware(
55+
new RequestCanceledMiddlewareOptions(),
56+
new Mock<ILogger<RequestCanceledMiddleware>>().Object)
57+
.InvokeAsync(this.context, this.next))
58+
.ConfigureAwait(false);
59+
}
60+
61+
[Fact]
62+
public async Task InvokeAsync_RequestCanceled_Returns499ClientClosedRequestAsync()
63+
{
64+
using var cancellationTokenSource = new CancellationTokenSource();
65+
cancellationTokenSource.Cancel();
66+
this.context.RequestAborted = cancellationTokenSource.Token;
67+
this.next = x => Task.FromCanceled(cancellationTokenSource.Token);
68+
69+
await new RequestCanceledMiddleware(
70+
new RequestCanceledMiddlewareOptions(),
71+
new Mock<ILogger<RequestCanceledMiddleware>>().Object)
72+
.InvokeAsync(this.context, this.next)
73+
.ConfigureAwait(false);
74+
75+
Assert.Equal(RequestCanceledMiddlewareOptions.ClientClosedRequest, this.context.Response.StatusCode);
76+
}
77+
}

0 commit comments

Comments
 (0)