Browse Source

Merge pull request #6120 from ilonze/dev

Update AbpNoContentActionFilter with unit test
pull/6129/head
maliming 6 years ago
committed by GitHub
parent
commit
648a0b6b5f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Response/AbpNoContentActionFilter.cs
  2. 8
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController.cs
  3. 25
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs
  4. 19
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/TestResultFilter.cs

3
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Response/AbpNoContentActionFilter.cs

@ -18,7 +18,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Response
await next(); await next();
if (context.HttpContext.Response.StatusCode == (int)HttpStatusCode.OK) if (context.HttpContext.Response.StatusCode == (int)HttpStatusCode.OK
&& context.Result == null)
{ {
var returnType = context.ActionDescriptor.GetReturnType(); var returnType = context.ActionDescriptor.GetReturnType();
if (returnType == typeof(Task) || returnType == typeof(void)) if (returnType == typeof(Task) || returnType == typeof(void))

8
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController.cs

@ -47,5 +47,13 @@ namespace Volo.Abp.AspNetCore.Mvc.Response
Response.Redirect("/"); Response.Redirect("/");
await Task.CompletedTask; await Task.CompletedTask;
} }
[HttpGet]
[Route("TestAsyncMethodWithResultFilter")]
[TestResultFilter]
public async Task TestAsyncMethodWithResultFilter()
{
await Task.CompletedTask;
}
} }
} }

25
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/NoContentTestController_Tests.cs

@ -10,49 +10,50 @@ namespace Volo.Abp.AspNetCore.Mvc.Response
[Fact] [Fact]
public async Task Should_Set_No_Content_For_Void_Action() public async Task Should_Set_No_Content_For_Void_Action()
{ {
var result = await GetResponseAsync("/api/NoContent-Test/TestMethod", HttpStatusCode.NoContent) var result = await GetResponseAsync("/api/NoContent-Test/TestMethod", HttpStatusCode.NoContent);
;
result.StatusCode.ShouldBe(HttpStatusCode.NoContent); result.StatusCode.ShouldBe(HttpStatusCode.NoContent);
} }
[Fact] [Fact]
public async Task Should_Not_Set_No_Content_For_Not_Void_Action() public async Task Should_Not_Set_No_Content_For_Not_Void_Action()
{ {
var result = await GetResponseAsync("/api/NoContent-Test/TestMethodWithReturn") var result = await GetResponseAsync("/api/NoContent-Test/TestMethodWithReturn");
;
result.StatusCode.ShouldBe(HttpStatusCode.OK); result.StatusCode.ShouldBe(HttpStatusCode.OK);
} }
[Fact] [Fact]
public async Task Should_Not_Set_No_Content_For_Custom_Http_Status_Code_Action() public async Task Should_Not_Set_No_Content_For_Custom_Http_Status_Code_Action()
{ {
var result = await GetResponseAsync("/api/NoContent-Test/TestCustomHttpStatusCodeMethod", HttpStatusCode.Redirect) var result = await GetResponseAsync("/api/NoContent-Test/TestCustomHttpStatusCodeMethod", HttpStatusCode.Redirect);
;
result.StatusCode.ShouldBe(HttpStatusCode.Redirect); result.StatusCode.ShouldBe(HttpStatusCode.Redirect);
} }
[Fact] [Fact]
public async Task Should_Set_No_Content_For_Task_Action() public async Task Should_Set_No_Content_For_Task_Action()
{ {
var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethod", HttpStatusCode.NoContent) var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethod", HttpStatusCode.NoContent);
;
result.StatusCode.ShouldBe(HttpStatusCode.NoContent); result.StatusCode.ShouldBe(HttpStatusCode.NoContent);
} }
[Fact] [Fact]
public async Task Should_Not_Set_No_Content_For_Not_Task_Action() public async Task Should_Not_Set_No_Content_For_Not_Task_Action()
{ {
var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithReturn") var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithReturn");
;
result.StatusCode.ShouldBe(HttpStatusCode.OK); result.StatusCode.ShouldBe(HttpStatusCode.OK);
} }
[Fact] [Fact]
public async Task Should_Not_Set_No_Content_For_Custom_Http_Status_Code_Async_Action() public async Task Should_Not_Set_No_Content_For_Custom_Http_Status_Code_Async_Action()
{ {
var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncCustomHttpStatusCodeMethod", HttpStatusCode.Redirect) var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncCustomHttpStatusCodeMethod", HttpStatusCode.Redirect);
;
result.StatusCode.ShouldBe(HttpStatusCode.Redirect); result.StatusCode.ShouldBe(HttpStatusCode.Redirect);
} }
[Fact]
public async Task Should_Not_Set_No_Content_For_Custom_Result_Filter_Async_Action()
{
var result = await GetResponseAsync("/api/NoContent-Test/TestAsyncMethodWithResultFilter");
result.StatusCode.ShouldBe(HttpStatusCode.OK);
}
} }
} }

19
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Response/TestResultFilter.cs

@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.Response
{
public class TestResultFilter : Attribute, IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
await next();
context.Result = new ObjectResult("TestResultFilter");
}
}
}
Loading…
Cancel
Save