public async Task WhenAModelStateValidationExceptionIsRaised_AValidationErrorWillBeReturned_WithBadRequestHttpStatus() { // Arrange var requestDTO = new RequestModelBasic() { Id = 0, Message = string.Empty, CreatedOn = DateTime.Now }; // Perform a validation using ModelState var modelState = new ModelStateDictionary(); modelState.AddModelError("Error_1", "Input string '1.3' is not a valid integer. Path 'userId', line 2, position 17."); modelState["Error_1"].RawValue = "1.3"; modelState.AddModelError("Error_2", "Could not convert string to DateTime: 2018:10. Path 'momentsDate', line 4, position 28."); ValidationException thrownException = new ValidationException("bad_request", modelState, string.Empty); ValidationError expectedResponse = new ValidationError(thrownException.ValidationFailures, string.Empty); var middleware = new ExceptionHandlerMiddleware((innerHttpContext) => { throw thrownException; }, _logger); var context = new DefaultHttpContext(); context.Response.Body = new MemoryStream(); //Act await middleware.Invoke(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var reader = new StreamReader(context.Response.Body); var streamText = reader.ReadToEnd(); var actualResponse = JsonConvert.DeserializeObject <ValidationError>(streamText); //Assert Assert.Equal(expectedResponse.StatusCode, actualResponse.StatusCode); Assert.Equal(expectedResponse.StatusCode, context.Response.StatusCode); Assert.Equal(expectedResponse.StatusMessage, actualResponse.StatusMessage); Assert.NotNull(actualResponse.Errors); Assert.Equal(expectedResponse.Errors.Count, actualResponse.Errors.Count); for (int i = 0; i < actualResponse.Errors.Count; i++) { Assert.Equal(expectedResponse.Errors[i].Code, actualResponse.Errors[i].Code); Assert.Equal(expectedResponse.Errors[i].Message, actualResponse.Errors[i].Message); Assert.Equal(expectedResponse.Errors[i].AttemptedValue, actualResponse.Errors[i].AttemptedValue); Assert.Equal(expectedResponse.Errors[i].Field, actualResponse.Errors[i].Field); } }
public async Task WhenAFluentValidationExceptionIsRaised_AValidationErrorWillBeReturned_WithBadRequestHttpStatus() { // Arrange var requestDTO = new RequestModelBasic() { Id = 0, Message = string.Empty, CreatedOn = DateTime.Now }; // Perform a validation using a FluentValidator var validator = new RequestModelBasicValidator(); FluentValidation.Results.ValidationResult validationResult = validator.Validate(requestDTO); ValidationException thrownException = new ValidationException(validationResult.Errors, string.Empty); ValidationError expectedResponse = new ValidationError(validationResult.Errors, string.Empty); var middleware = new ExceptionHandlerMiddleware((innerHttpContext) => { throw thrownException; }, _logger); var context = new DefaultHttpContext(); context.Response.Body = new MemoryStream(); //Act await middleware.Invoke(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var reader = new StreamReader(context.Response.Body); var streamText = reader.ReadToEnd(); var actualResponse = JsonConvert.DeserializeObject <ValidationError>(streamText); //Assert Assert.Equal(expectedResponse.StatusCode, actualResponse.StatusCode); Assert.Equal(expectedResponse.StatusCode, context.Response.StatusCode); Assert.Equal(expectedResponse.StatusMessage, actualResponse.StatusMessage); Assert.NotNull(actualResponse.Errors); Assert.Equal(expectedResponse.Errors.Count, actualResponse.Errors.Count); for (int i = 0; i < actualResponse.Errors.Count; i++) { Assert.Equal(expectedResponse.Errors[i].Code, actualResponse.Errors[i].Code); Assert.Equal(expectedResponse.Errors[i].Message, actualResponse.Errors[i].Message); Assert.Equal(expectedResponse.Errors[i].AttemptedValue.ToString(), actualResponse.Errors[i].AttemptedValue.ToString()); Assert.Equal(expectedResponse.Errors[i].Field, actualResponse.Errors[i].Field); } }