public void ShouldReflectAbsenceOfConfigurationOnMetaDescriptor()
		{
			BaseController controller = new BaseController();
			ActionMetaDescriptor actionMeta = new ActionMetaDescriptor();

			ActionMethodExecutor executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

			Assert.IsFalse(executor.ShouldSkipAllFilters);
			Assert.IsFalse(executor.ShouldSkipRescues);
			Assert.IsFalse(executor.ShouldSkipFilter(typeof(DummyFilter)));
			Assert.IsNull(executor.LayoutOverride);
			Assert.AreEqual(0, executor.Resources.Length);
		}
Пример #2
0
        private static ControllerActionInvokerCacheEntry CreateCacheEntry(
            ControllerActionDescriptor actionDescriptor,
            MockControllerFactory controllerFactory)
        {
            var objectMethodExecutor = CreateExecutor(actionDescriptor);

            return(new ControllerActionInvokerCacheEntry(
                       new FilterItem[0],
                       controllerFactory.CreateController,
                       controllerFactory.ReleaseControllerAsync,
                       null,
                       objectMethodExecutor,
                       ActionMethodExecutor.GetExecutor(objectMethodExecutor)));
        }
Пример #3
0
    public void ActionMethodExecutor_ExecutesActionsReturningSubTypeOfActionResult()
    {
        // Arrange
        var mapper               = new ActionResultTypeMapper();
        var controller           = new TestController();
        var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnsIActionResultSubType));
        var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

        // Act
        var valueTask = actionMethodExecutor.Execute(mapper, objectMethodExecutor, controller, Array.Empty <object>());

        // Assert
        Assert.IsType <ContentResult>(valueTask.Result);
    }
Пример #4
0
    public void ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningIActionResultAsObject()
    {
        // Arrange
        var mapper               = new ActionResultTypeMapper();
        var controller           = new TestController();
        var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnIActionResultAsObjectAsync));
        var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

        // Act
        var valueTask = actionMethodExecutor.Execute(mapper, objectMethodExecutor, controller, Array.Empty <object>());

        // Assert
        Assert.IsType <OkResult>(valueTask.Result);
    }
Пример #5
0
    public void ActionMethodExecutor_ThrowsIfIConvertFromIActionResult_ReturnsNull()
    {
        // Arrange
        var mapper               = new ActionResultTypeMapper();
        var controller           = new TestController();
        var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnsCustomConvertibleFromIActionResult));
        var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

        // Act & Assert
        var ex = Assert.Throws <InvalidOperationException>(
            () => actionMethodExecutor.Execute(mapper, objectMethodExecutor, controller, Array.Empty <object>()));

        Assert.Equal($"Cannot return null from an action method with a return type of '{typeof(CustomConvertibleFromAction)}'.", ex.Message);
    }
		public void ShouldReturnTrueToSkipSpecifiedFiltersReflectingMeta()
		{
			BaseController controller = new BaseController();
			ActionMetaDescriptor actionMeta = new ActionMetaDescriptor();
			actionMeta.SkipFilters.Add(new SkipFilterAttribute(typeof(DummyFilter)));

			ActionMethodExecutor executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

			Assert.IsTrue(executor.ShouldSkipFilter(typeof(DummyFilter)));
			Assert.IsFalse(executor.ShouldSkipRescues);
			Assert.IsFalse(executor.ShouldSkipAllFilters);
			Assert.IsNull(executor.LayoutOverride);
			Assert.AreEqual(0, executor.Resources.Length);
		}
Пример #7
0
        public void ShouldReturnTrueToSkipSpecifiedFiltersReflectingMeta()
        {
            var controller = new BaseController();
            var actionMeta = new ActionMetaDescriptor();

            actionMeta.SkipFilters.Add(new SkipFilterAttribute(typeof(DummyFilter)));

            var executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

            Assert.IsTrue(executor.ShouldSkipFilter(typeof(DummyFilter)));
            Assert.IsFalse(executor.ShouldSkipRescues);
            Assert.IsFalse(executor.ShouldSkipAllFilters);
            Assert.IsNull(executor.LayoutOverride);
            Assert.AreEqual(0, executor.Resources.Length);
        }
Пример #8
0
 internal ControllerActionInvokerCacheEntry(
     FilterItem[] cachedFilters,
     Func <ControllerContext, object> controllerFactory,
     Func <ControllerContext, object, ValueTask>?controllerReleaser,
     ControllerBinderDelegate?controllerBinderDelegate,
     ObjectMethodExecutor objectMethodExecutor,
     ActionMethodExecutor actionMethodExecutor)
 {
     ControllerFactory        = controllerFactory;
     ControllerReleaser       = controllerReleaser;
     ControllerBinderDelegate = controllerBinderDelegate;
     CachedFilters            = cachedFilters;
     ObjectMethodExecutor     = objectMethodExecutor;
     ActionMethodExecutor     = actionMethodExecutor;
 }
Пример #9
0
        public void ActionMethodExecutor_ExecutesVoidActions()
        {
            // Arrange
            var mapper               = new ActionResultTypeMapper();
            var controller           = new TestController();
            var objectMethodExecutor = GetExecutor(nameof(TestController.VoidAction));
            var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

            // Act
            var valueTask = actionMethodExecutor.Execute(mapper, objectMethodExecutor, controller, Array.Empty <object>());

            // Assert
            Assert.True(controller.Executed);
            Assert.IsType <EmptyResult>(valueTask.Result);
        }
Пример #10
0
        public async Task ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningActionResultSubType()
        {
            // Arrange
            var controller           = new TestController();
            var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnIActionResultAsync));
            var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

            // Act
            var valueTask = actionMethodExecutor.Execute(objectMethodExecutor, controller, Array.Empty <object>());

            // Assert
            await valueTask;

            Assert.IsType <ViewResult>(valueTask.Result);
        }
Пример #11
0
        public void ShouldReturnResourcesReflectingMeta()
        {
            var controller = new BaseController();
            var actionMeta = new ActionMetaDescriptor
            {
                Resources = new[] { new ResourceDescriptor(typeof(BaseController), "name", "resname", "cult", "assm") }
            };

            var executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

            Assert.IsFalse(executor.ShouldSkipFilter(typeof(DummyFilter)));
            Assert.IsFalse(executor.ShouldSkipRescues);
            Assert.IsFalse(executor.ShouldSkipAllFilters);
            Assert.IsNull(executor.LayoutOverride);
            Assert.AreEqual(1, executor.Resources.Length);
        }
Пример #12
0
    public void ActionMethodExecutor_ExecutesActionsReturningIActionResult()
    {
        // Arrange
        var mapper               = new ActionResultTypeMapper();
        var controller           = new TestController();
        var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnIActionResult));
        var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

        // Act
        var valueTask = actionMethodExecutor.Execute(mapper, objectMethodExecutor, controller, Array.Empty <object>());

        // Assert
        Assert.Equal("SyncActionResultExecutor", actionMethodExecutor.GetType().Name);
        Assert.True(valueTask.IsCompleted);
        Assert.IsType <ContentResult>(valueTask.Result);
    }
Пример #13
0
    public void ActionMethodExecutor_ExecutesActionsReturnAwaitable()
    {
        // Arrange
        var mapper               = new ActionResultTypeMapper();
        var controller           = new TestController();
        var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnsAwaitable));
        var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

        // Act
        var awaitableResult = actionMethodExecutor.Execute(mapper, objectMethodExecutor, controller, Array.Empty <object>());

        // Assert
        Assert.Equal("AwaitableResultExecutor", actionMethodExecutor.GetType().Name);
        Assert.True(controller.Executed);
        Assert.IsType <EmptyResult>(awaitableResult.Result);
    }
Пример #14
0
        public void ShouldReturnLayoutReflectingMeta()
        {
            var controller = new BaseController();
            var actionMeta = new ActionMetaDescriptor
            {
                Layout = new LayoutDescriptor("layoutname")
            };

            var executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

            Assert.IsFalse(executor.ShouldSkipFilter(typeof(DummyFilter)));
            Assert.IsFalse(executor.ShouldSkipRescues);
            Assert.IsFalse(executor.ShouldSkipAllFilters);
            Assert.AreEqual("layoutname", executor.LayoutOverride[0]);
            Assert.AreEqual(0, executor.Resources.Length);
        }
Пример #15
0
        public void ExecutesActionAndReturnValue()
        {
            var controller = new BaseController();
            var actionMeta = new ActionMetaDescriptor();

            var executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

            var            req           = new StubRequest();
            var            res           = new StubResponse();
            var            services      = new StubMonoRailServices();
            IEngineContext engineContext = new StubEngineContext(req, res, services, new UrlInfo("area", "controller", "action"));
            var            retVal        = executor.Execute(engineContext, controller, new ControllerContext());

            Assert.IsTrue(controller.WasExecuted);
            Assert.AreEqual(1, retVal);
        }
Пример #16
0
        public void ActionMethodExecutor_ExecutesActionsReturningModelAsObject()
        {
            // Arrange
            var controller           = new TestController();
            var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnModelAsObject));
            var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

            // Act
            var valueTask = actionMethodExecutor.Execute(objectMethodExecutor, controller, Array.Empty <object>());

            // Assert
            var result = Assert.IsType <ObjectResult>(valueTask.Result);

            Assert.NotNull(result.Value);
            Assert.IsType <TestModel>(result.Value);
        }
Пример #17
0
        public void ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningActionResultOfT()
        {
            // Arrange
            var mapper               = new ActionResultTypeMapper();
            var controller           = new TestController();
            var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnActionResultOFTAsync));
            var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

            // Act
            var valueTask = actionMethodExecutor.Execute(mapper, objectMethodExecutor, controller, Array.Empty <object>());

            // Assert
            var result = Assert.IsType <ObjectResult>(valueTask.Result);

            Assert.NotNull(result.Value);
            Assert.IsType <TestModel>(result.Value);
        }
        public void ActionMethodExecutor_ExecutesActionsReturningModelAsModel()
        {
            // Arrange
            var mapper               = new ActionResultTypeMapper();
            var controller           = new TestController();
            var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnsModelAsModel));
            var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);

            // Act
            var valueTask = actionMethodExecutor.Execute(mapper, objectMethodExecutor, controller, Array.Empty <object>());

            // Assert
            var result = Assert.IsType <ObjectResult>(valueTask.Result);

            Assert.NotNull(result.Value);
            Assert.IsType <TestModel>(result.Value);
            Assert.Equal(typeof(TestModel), result.DeclaredType);
        }
Пример #19
0
    public async Task ActionMethodExecutor_ThrowsIfIConvertFromIActionResult_ReturnsNull(bool withFilter)
    {
        // Arrange
        var mapper               = new ActionResultTypeMapper();
        var controller           = new TestController();
        var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnsCustomConvertibleFromIActionResult));
        var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);
        var filterContext        = new ControllerEndpointFilterInvocationContext(new Controllers.ControllerActionDescriptor(),
                                                                                 new ActionContext(),
                                                                                 objectMethodExecutor,
                                                                                 mapper,
                                                                                 controller,
                                                                                 Array.Empty <object>());

        // Act & Assert
        var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => Execute(actionMethodExecutor, filterContext, withFilter).AsTask());

        Assert.Equal($"Cannot return null from an action method with a return type of '{typeof(CustomConvertibleFromAction)}'.", ex.Message);
    }
Пример #20
0
    public void ActionMethodExecutor_ExecutesActionsReturningSubTypeOfActionResult(bool withFilter)
    {
        // Arrange
        var mapper               = new ActionResultTypeMapper();
        var controller           = new TestController();
        var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnsIActionResultSubType));
        var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);
        var filterContext        = new ControllerEndpointFilterInvocationContext(new Controllers.ControllerActionDescriptor(),
                                                                                 new ActionContext(),
                                                                                 objectMethodExecutor,
                                                                                 mapper,
                                                                                 controller,
                                                                                 Array.Empty <object>());

        // Act
        var valueTask = Execute(actionMethodExecutor, filterContext, withFilter);

        // Assert
        Assert.Equal("SyncActionResultExecutor", actionMethodExecutor.GetType().Name);
        Assert.IsType <ContentResult>(valueTask.Result);
    }
Пример #21
0
    public async Task ActionMethodExecutor_ExecutesActionsAsynchronouslyReturningActionResultSubType(bool withFilter)
    {
        // Arrange
        var mapper               = new ActionResultTypeMapper();
        var controller           = new TestController();
        var objectMethodExecutor = GetExecutor(nameof(TestController.ReturnActionResultAsync));
        var actionMethodExecutor = ActionMethodExecutor.GetExecutor(objectMethodExecutor);
        var filterContext        = new ControllerEndpointFilterInvocationContext(new Controllers.ControllerActionDescriptor(),
                                                                                 new ActionContext(),
                                                                                 objectMethodExecutor,
                                                                                 mapper,
                                                                                 controller,
                                                                                 Array.Empty <object>());

        // Act
        var valueTask = Execute(actionMethodExecutor, filterContext, withFilter);

        // Assert
        await valueTask;

        Assert.Equal("TaskOfActionResultExecutor", actionMethodExecutor.GetType().Name);
        Assert.IsType <ViewResult>(valueTask.Result);
    }
		public void ShouldReturnResourcesReflectingMeta()
		{
			BaseController controller = new BaseController();
			ActionMetaDescriptor actionMeta = new ActionMetaDescriptor();
			actionMeta.Resources = new ResourceDescriptor[] { new ResourceDescriptor(typeof(BaseController), "name", "resname", "cult", "assm") };

			ActionMethodExecutor executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

			Assert.IsFalse(executor.ShouldSkipFilter(typeof(DummyFilter)));
			Assert.IsFalse(executor.ShouldSkipRescues);
			Assert.IsFalse(executor.ShouldSkipAllFilters);
			Assert.IsNull(executor.LayoutOverride);
			Assert.AreEqual(1, executor.Resources.Length);
		}
		public void ExecutesActionAndReturnValue()
		{
			BaseController controller = new BaseController();
			ActionMetaDescriptor actionMeta = new ActionMetaDescriptor();

			ActionMethodExecutor executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

			StubRequest req = new StubRequest();
			StubResponse res = new StubResponse();
			StubMonoRailServices services = new StubMonoRailServices();
			IEngineContext engineContext = new StubEngineContext(req, res, services, new UrlInfo("area", "controller", "action"));
			object retVal = executor.Execute(engineContext, controller, new ControllerContext());

			Assert.IsTrue(controller.WasExecuted);
			Assert.AreEqual(1, retVal);
		}
		public void ShouldReturnLayoutReflectingMeta()
		{
			BaseController controller = new BaseController();
			ActionMetaDescriptor actionMeta = new ActionMetaDescriptor();
			actionMeta.Layout = new LayoutDescriptor("layoutname");

			ActionMethodExecutor executor = new ActionMethodExecutor(GetActionMethod(controller), actionMeta);

			Assert.IsFalse(executor.ShouldSkipFilter(typeof(DummyFilter)));
			Assert.IsFalse(executor.ShouldSkipRescues);
			Assert.IsFalse(executor.ShouldSkipAllFilters);
			Assert.AreEqual("layoutname", executor.LayoutOverride[0]);
			Assert.AreEqual(0, executor.Resources.Length);
		}