public async Task OnActionExecutionAsync_GivenValidContext_ShouldHaveNullResult()
        {
            // Arrange
            var modelState = new ModelStateDictionary();

            var actionContext = new ActionContext(
                new Mock <HttpContext>().Object,
                new Mock <RouteData>().Object,
                new Mock <ActionDescriptor>().Object,
                modelState
                );

            var actionExecutingContext = new ActionExecutingContext(
                actionContext,
                new List <IFilterMetadata>(),
                new Dictionary <string, object>(),
                new Mock <Controller>().Object
                );

            var actionExecutedContext = new ActionExecutedContext(
                actionContext,
                new List <IFilterMetadata>(),
                new Mock <Controller>().Object
                );

            ValidateModelFilter filter = new ValidateModelFilter();

            // Act
            await filter.OnActionExecutionAsync(actionExecutingContext, async() => await Task.FromResult(actionExecutedContext));

            // Assert
            Assert.IsNull(actionExecutingContext.Result);
        }
        public async Task OnActionExecutionAsync_GivenInvalidContext_ShouldHaveBadRequestObjectResult()
        {
            // Arrange
            var modelState = new ModelStateDictionary();

            modelState.AddModelError("name", "invalid");

            var actionContext = new ActionContext(
                new Mock <HttpContext>().Object,
                new Mock <RouteData>().Object,
                new Mock <ActionDescriptor>().Object,
                modelState
                );

            var actionExecutingContext = new ActionExecutingContext(
                actionContext,
                new List <IFilterMetadata>(),
                new Dictionary <string, object>(),
                new Mock <Controller>().Object
                );

            var actionExecutedContext = new ActionExecutedContext(
                actionContext,
                new List <IFilterMetadata>(),
                new Mock <Controller>().Object
                );

            ValidateModelFilter filter = new ValidateModelFilter();

            // Act
            await filter.OnActionExecutionAsync(actionExecutingContext, async() => await Task.FromResult(actionExecutedContext));

            // Assert
            Assert.IsInstanceOfType(actionExecutingContext.Result, typeof(BadRequestObjectResult));
        }
        public void TestOnResulting()
        {
            ModelStateDictionary modelState = new ModelStateDictionary();

            modelState.AddModelError("", "Campo inválido");

            ResultExecutingContext context = new ResultExecutingContext(
                new ActionContext(
                    httpContext: new DefaultHttpContext(),
                    routeData: new RouteData(),
                    actionDescriptor: new ActionDescriptor(),
                    modelState: modelState
                    ),
                new List <IFilterMetadata>(),
                new Mock <ActionResult>().Object,
                new Mock <Controller>().Object
                );

            ValidateModelFilter filter = new ValidateModelFilter();

            filter.OnResultExecuting(context);

            Assert.IsNotNull(context.Result);
        }