From 4de1cf86d4e4f27b2ec65e33fcab0040bf56e7ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E6=98=9F=E7=B9=81?= Date: Mon, 13 Mar 2023 15:39:54 +0800 Subject: [PATCH] fix: remove redundant double quote when command fails --- .../ApiControllerBase.cs | 10 +++++ .../CommandEndpointHandler.cs | 4 +- .../Controllers/TestController.cs | 7 ++-- .../CommandResponseHandlerTests.cs | 39 +++++++++++++++++++ 4 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 test/Cnblogs.Architecture.IntegrationTests/CommandResponseHandlerTests.cs diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/ApiControllerBase.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/ApiControllerBase.cs index 0afa868..218a314 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/ApiControllerBase.cs +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/ApiControllerBase.cs @@ -60,4 +60,14 @@ private IActionResult HandleErrorCommandResponse(CommandResponse return BadRequest(response.ErrorCode?.Name ?? response.ErrorMessage); } + + private static IActionResult BadRequest(string text) + { + return new ContentResult + { + Content = text, + ContentType = "text/plain", + StatusCode = 400 + }; + } } diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CommandEndpointHandler.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CommandEndpointHandler.cs index 7e510b7..85d89fd 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CommandEndpointHandler.cs +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CommandEndpointHandler.cs @@ -61,7 +61,7 @@ private static IResult HandleErrorCommandResponse(CommandResponse response) { if (response.IsValidationError) { - return Results.BadRequest(response.ValidationError!.Message); + return Results.Text(response.ValidationError!.Message, statusCode: 400); } if (response is { IsConcurrentError: true, LockAcquired: false }) @@ -69,6 +69,6 @@ private static IResult HandleErrorCommandResponse(CommandResponse response) return Results.StatusCode(429); } - return Results.BadRequest(response.GetErrorMessage()); + return Results.Text(response.GetErrorMessage(), statusCode: 400); } } diff --git a/test/Cnblogs.Architecture.IntegrationTestProject/Controllers/TestController.cs b/test/Cnblogs.Architecture.IntegrationTestProject/Controllers/TestController.cs index dc73dc1..07e65d9 100644 --- a/test/Cnblogs.Architecture.IntegrationTestProject/Controllers/TestController.cs +++ b/test/Cnblogs.Architecture.IntegrationTestProject/Controllers/TestController.cs @@ -1,5 +1,5 @@ using Asp.Versioning; - +using Cnblogs.Architecture.Ddd.Cqrs.AspNetCore; using Cnblogs.Architecture.Ddd.Infrastructure.Abstractions; using Microsoft.AspNetCore.Mvc; @@ -7,13 +7,12 @@ namespace Cnblogs.Architecture.IntegrationTestProject.Controllers; [ApiVersion("1")] -[ApiController] [Route("/api/v{version:apiVersion}")] -public class TestController : ControllerBase +public class TestController : ApiControllerBase { [HttpGet("paging")] public Task PagingParamsAsync([FromQuery] PagingParams? pagingParams) { return Task.FromResult(pagingParams); } -} \ No newline at end of file +} diff --git a/test/Cnblogs.Architecture.IntegrationTests/CommandResponseHandlerTests.cs b/test/Cnblogs.Architecture.IntegrationTests/CommandResponseHandlerTests.cs new file mode 100644 index 0000000..a00d450 --- /dev/null +++ b/test/Cnblogs.Architecture.IntegrationTests/CommandResponseHandlerTests.cs @@ -0,0 +1,39 @@ +using System.Net.Http.Json; +using Cnblogs.Architecture.IntegrationTestProject; +using Cnblogs.Architecture.IntegrationTestProject.Application.Errors; +using Cnblogs.Architecture.IntegrationTestProject.Payloads; +using FluentAssertions; +using Microsoft.AspNetCore.Mvc.Testing; + +namespace Cnblogs.Architecture.IntegrationTests; + +public class CommandResponseHandlerTests +{ + [Fact] + public async Task HandleCommandResponse_HavingError_BadRequestAsync() + { + // Arrange + var builder = new WebApplicationFactory(); + + // Act + var response = await builder.CreateClient().PutAsJsonAsync("/api/v1/strings/1", new UpdatePayload(true)); + var content = await response.Content.ReadAsStringAsync(); + + // Assert + response.Should().HaveClientError(); + content.Should().Be(TestError.Default.Name); + } + + [Fact] + public async Task HandleCommandResponse_Success_OkAsync() + { + // Arrange + var builder = new WebApplicationFactory(); + + // Act + var response = await builder.CreateClient().PutAsJsonAsync("/api/v1/strings/1", new UpdatePayload(false)); + + // Assert + response.Should().BeSuccessful(); + } +}