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); }
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))); }
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); }
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); }
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); }
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); }
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; }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }