public async Task AndValidationExceptionIsThrownThenReturnBadRequest() { var expectedErrorMessage = Guid.NewGuid().ToString(); var expectedErrorCode = Guid.NewGuid().ToString(); var validationException = new ValidationException(new[] { new ValidationFailure("", expectedErrorMessage) { ErrorCode = expectedErrorCode } }); var badrequestContent = new BadRequestContent { RequestErrors = validationException.Errors .Select(validationFailure => new BadRequestError { ErrorCode = validationFailure.ErrorCode, ErrorMessage = validationFailure.ErrorMessage }) }; var badrequestResponse = new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new ObjectContent <BadRequestContent>(badrequestContent, new JsonMediaTypeFormatter()) }; _mockValidationBadRequestBuilder .Setup(builder => builder.CreateBadRequestResult(It.IsAny <ValidationException>(), It.IsAny <HttpRequestMessage>())) .Returns(new CustomErrorResult(new HttpRequestMessage(), badrequestResponse)); var context = new ExceptionHandlerContext(new ExceptionContext( validationException, new ExceptionContextCatchBlock("name", true, true), new HttpRequestMessage())); _handler.Handle(context); var message = await context.Result.ExecuteAsync(CancellationToken.None); _logger.Verify(l => l.Info("Validation error"), Times.Once); message.StatusCode.Should().Be(HttpStatusCode.BadRequest); message.Content.ReadAsAsync <BadRequestContent>().Result.RequestErrors .ShouldAllBeEquivalentTo(new[] { new BadRequestError { ErrorCode = expectedErrorCode, ErrorMessage = expectedErrorMessage } }); }
public IHttpActionResult CreateBadRequestResult(ValidationException validationException, HttpRequestMessage request) { var badRequestContent = new BadRequestContent { RequestErrors = validationException.Errors .Select(validationFailure => new BadRequestError { ErrorCode = validationFailure.ErrorCode, ErrorMessage = validationFailure.ErrorMessage }) }; var response = request.CreateResponse(HttpStatusCode.BadRequest, badRequestContent); return(new CustomErrorResult(request, response)); }