Exemplo n.º 1
0
        public void Should_Invoke_Next_When_Model_Is_Valid()
        {
            using (var mock = AutoMock.GetLoose())
            {
                // Arrange
                var filter = new ModelValidationAttribute();
                var modelStateDictionary = new ModelStateDictionary();
                modelStateDictionary.AddModelError("Id", "Id must not be null.");
                var actionDescriptor = new ActionDescriptor();
                var actionContext    = new ActionContext(
                    new DefaultHttpContext(),
                    new RouteData(),
                    actionDescriptor,
                    modelStateDictionary);

                var controller             = mock.Create <BooksController>();
                var actionExecutingContext = new ActionExecutingContext(
                    actionContext,
                    new List <IFilterMetadata>(),
                    new Dictionary <string, object>(),
                    controller);

                // Act
                filter.OnActionExecuting(actionExecutingContext);

                // Assert
                Assert.IsType <BadRequestObjectResult>(actionExecutingContext.Result);
            }
        }
        public void FailedModelValidationShouldResultInBadRequestStatus()
        {
            var modelState = new ModelStateDictionary();

            modelState.AddModelError("fieldName", "error");

            var httpContext = new DefaultHttpContext();

            var actionExecutingContext = new ActionExecutingContext(
                new ActionContext(
                    httpContext: httpContext,
                    routeData: new Microsoft.AspNetCore.Routing.RouteData(),
                    actionDescriptor: new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor(),
                    modelState: modelState),
                new List <IFilterMetadata>(),
                new Dictionary <string, object>(),
                new Mock <Controller>().Object);

            var actionFilter = new ModelValidationAttribute(this._logger.Object);

            //Act
            actionFilter.OnActionExecuting(actionExecutingContext);

            //Assert
            Assert.IsNotNull(actionExecutingContext.Result);
            Assert.IsInstanceOf <BadRequestObjectResult>(actionExecutingContext.Result);

            var resultAsBadRequestObject = actionExecutingContext.Result as BadRequestObjectResult;

            Assert.IsTrue(resultAsBadRequestObject.StatusCode == 400);
            Assert.IsNotNull(resultAsBadRequestObject.Value);
            Assert.IsInstanceOf <ResponseBaseDto>(resultAsBadRequestObject.Value);

            var resultValue = resultAsBadRequestObject.Value as ResponseBaseDto;

            Assert.IsTrue(resultValue.StatusCode == HttpStatusCode.BadRequest);
            Assert.IsNotNull(resultValue.Data);
            Assert.IsInstanceOf <ValidationErrorResponse>(resultValue.Data);

            var resultError = resultValue.Data as ValidationErrorResponse;

            Assert.IsTrue(resultError.ErrorMessage == Resources.ErrorMessage_Validation);
            Assert.IsTrue(resultError.ErrorDescription == Resources.ErrorDescription_Validation);
            Assert.IsTrue(resultError.ErrorCode == Resources.ErrorCode_Validation);
            Assert.IsNotNull(resultError.ValidationErrors);
            Assert.IsTrue(resultError.ValidationErrors.Count == 1);
            Assert.IsTrue(resultError.ValidationErrors[0].FieldName == "fieldName");
            Assert.IsNotNull(resultError.ValidationErrors[0].ErrorMessages);
            Assert.IsTrue(resultError.ValidationErrors[0].ErrorMessages.Length == 1);
            Assert.IsTrue(resultError.ValidationErrors[0].ErrorMessages[0] == "error");

            //Verify logging took place
            this._logger.Verify(x => x.Log(LogLevel.Error,
                                           It.IsAny <EventId>(),
                                           It.IsAny <It.IsAnyType>(),
                                           It.IsAny <Exception>(),
                                           (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()), Times.Once);
        }
        public void SuccessfulModelValidationShouldNotUpdateContextResult()
        {
            var modelState = new ModelStateDictionary();

            var httpContext = new DefaultHttpContext();

            var actionExecutingContext = new ActionExecutingContext(
                new ActionContext(
                    httpContext: httpContext,
                    routeData: new Microsoft.AspNetCore.Routing.RouteData(),
                    actionDescriptor: new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor(),
                    modelState: modelState),
                new List <IFilterMetadata>(),
                new Dictionary <string, object>(),
                new Mock <Controller>().Object);

            var actionFilter = new ModelValidationAttribute(this._logger.Object);

            //Act
            actionFilter.OnActionExecuting(actionExecutingContext);

            //Assert
            Assert.IsNull(actionExecutingContext.Result);
        }
Exemplo n.º 4
0
        private static ModelValidationAttribute MakeSut()
        {
            var sut = new ModelValidationAttribute();

            return(sut);
        }