Пример #1
0
        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));
        }