public void TestJsonResult_T_should_work_as_expected()
        {
            ApiControllerHttpActionResultActionTester actionTester =
                _controllerTester.Action(x => () => x.HttpActionResultActionWithArgument("test"));

            _controller.HttpActionResult = new JsonResult <TestClass>(
                new TestClass(),
                new JsonSerializerSettings(), System.Text.Encoding.UTF8, new HttpRequestMessage());

            JsonResult <TestClass> result          = null;
            JsonResult <TestClass> validatedResult = null;
            bool validateWasCalled = false;

            Action action = () =>
            {
                result = actionTester.TestJsonResult <TestClass>(r =>
                {
                    validatedResult   = r;
                    validateWasCalled = true;
                });
            };

            action.Should().NotThrow();
            result.Should().Be(_controller.HttpActionResult);
            validateWasCalled.Should().BeTrue();
            validatedResult.Should().Be(_controller.HttpActionResult);

            _controller.HttpActionResult = _okResult;
            action.Should().Throw <ControllerTestException>().WithMessage(
                $"Expected IHttpActionResult type {result.GetType().FullName}. Actual: System.Web.Http.Results.OkResult.");
        }
        public void TestUnauthorizedResult_should_work_as_expected_with_method_without_arguments()
        {
            ApiControllerHttpActionResultActionTester actionTester = _controllerTester.Action(x => x.HttpActionResultActionWithoutArguments);

            _controller.HttpActionResult = new UnauthorizedResult(Enumerable.Empty <AuthenticationHeaderValue>(), _controller);

            UnauthorizedResult result          = null;
            UnauthorizedResult validatedResult = null;
            bool validateWasCalled             = false;

            Action action = () =>
            {
                result = actionTester.TestUnauthorizedResult(r =>
                {
                    validatedResult   = r;
                    validateWasCalled = true;
                });
            };

            action.Should().NotThrow();
            result.Should().Be(_controller.HttpActionResult);
            validateWasCalled.Should().BeTrue();
            validatedResult.Should().Be(_controller.HttpActionResult);

            _controller.HttpActionResult = _okResult;
            action.Should().Throw <ControllerTestException>().WithMessage(
                "Expected IHttpActionResult type System.Web.Http.Results.UnauthorizedResult. Actual: System.Web.Http.Results.OkResult.");
        }
        public void TestBadRequestErrorMessageResult_should_work_as_expected_with_method_with_arguments()
        {
            ApiControllerHttpActionResultActionTester actionTester =
                _controllerTester.Action(x => () => x.HttpActionResultActionWithArgument("test"));

            _controller.HttpActionResult = new BadRequestErrorMessageResult("message", _controller);

            BadRequestErrorMessageResult result          = null;
            BadRequestErrorMessageResult validatedResult = null;
            bool validateWasCalled = false;

            Action action = () =>
            {
                result = actionTester.TestBadRequestErrorMessageResult(r =>
                {
                    validatedResult   = r;
                    validateWasCalled = true;
                });
            };

            action.Should().NotThrow();
            result.Should().Be(_controller.HttpActionResult);
            validateWasCalled.Should().BeTrue();
            validatedResult.Should().Be(_controller.HttpActionResult);

            _controller.HttpActionResult = _okResult;
            action.Should().Throw <ControllerTestException>().WithMessage(
                "Expected IHttpActionResult type System.Web.Http.Results.BadRequestErrorMessageResult. Actual: System.Web.Http.Results.OkResult.");
        }
        public void TestRedirectToRouteResult_should_work_as_expected_with_method_without_arguments()
        {
            ApiControllerHttpActionResultActionTester actionTester = _controllerTester.Action(x => x.HttpActionResultActionWithoutArguments);

            _controller.HttpActionResult = new RedirectToRouteResult("test", new Dictionary <string, object>(), _controller);

            RedirectToRouteResult result          = null;
            RedirectToRouteResult validatedResult = null;
            bool validateWasCalled = false;

            Action action = () =>
            {
                result = actionTester.TestRedirectToRouteResult(r =>
                {
                    validatedResult   = r;
                    validateWasCalled = true;
                });
            };

            action.Should().NotThrow();
            result.Should().Be(_controller.HttpActionResult);
            validateWasCalled.Should().BeTrue();
            validatedResult.Should().Be(_controller.HttpActionResult);

            _controller.HttpActionResult = _okResult;
            action.Should().Throw <ControllerTestException>().WithMessage(
                "Expected IHttpActionResult type System.Web.Http.Results.RedirectToRouteResult. Actual: System.Web.Http.Results.OkResult.");
        }