Beispiel #1
0
        public void should_not_get_service_if_type_not_exist()
        {
            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(controllerTypeResolver.GetControllerTypes(ControllerAssemblies));

            Assert.Null(resolver.GetService(typeof(NotExistedType)));
        }
Beispiel #2
0
        public void should_get_service_if_type_exist()
        {
            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(controllerTypeResolver.GetControllerTypes(ControllerAssemblies));

            Assert.Equal(
                typeof(ControllerWithoutAction),
                resolver.GetService(typeof(ControllerWithoutAction)).GetType());
        }
        public void should_return_method_not_allowed_if_method_mismatches()
        {
            var matchedRoute = new HttpRoute(typeof(ControllerWithMismatchedMethod), "Post", HttpMethod.Post);

            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(controllerTypeResolver.GetControllerTypes(ControllerAssemblies));
            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, resolver);

            Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode);
        }
        public void should_get_internal_server_error_when_exception_occurs()
        {
            var matchedRoute = new HttpRoute(typeof(ControllerWithErrorAction), "Get", HttpMethod.Get);

            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(controllerTypeResolver.GetControllerTypes(ControllerAssemblies));
            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, resolver);

            Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
        }
        private static void CreateHttpControllerTypeResolverTracer(HttpConfiguration configuration, ITraceWriter traceWriter)
        {
            DefaultHttpControllerTypeResolver resolver =
                configuration.Services.GetHttpControllerTypeResolver() as DefaultHttpControllerTypeResolver;

            if (resolver != null)
            {
                IHttpControllerTypeResolver tracer = new DefaultHttpControllerTypeResolverTracer(resolver, traceWriter);
                configuration.Services.Replace(typeof(IHttpControllerTypeResolver), tracer);
            }
        }
        public void should_invoke_case_insensitively()
        {
            var matchedRoute = new HttpRoute(typeof(ControllerWithPublicAction), "GET", HttpMethod.Get);

            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(controllerTypeResolver.GetControllerTypes(ControllerAssemblies));
            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, resolver);

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
        public void should_only_invoke_public_instance_method()
        {
            var matchedRoute = new HttpRoute(typeof(ControllerWithNonPublicAction), "Get", HttpMethod.Get);

            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(controllerTypeResolver.GetControllerTypes(ControllerAssemblies));
            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, resolver);

            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
        }
        public void should_only_register_public_controller()
        {
            var matchedRoute = new HttpRoute(typeof(NonPublicController), "Get", HttpMethod.Get);

            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(controllerTypeResolver.GetControllerTypes(ControllerAssemblies));
            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, resolver);

            Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
        }
        public void should_return_internal_server_error_if_no_controller_is_found()
        {
            var matchedRoute = new HttpRoute(typeof(ControllerWithoutAction), "Get", HttpMethod.Get);

            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(
                controllerTypeResolver.GetControllerTypes(new[] { Assembly.GetExecutingAssembly() }));
            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, resolver);

            Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
        }
        public void should_invoke_case_insensitively()
        {
            var matchedRoute = new HttpRoute("ControllerWithPublicAction", "GET", HttpMethod.Get);

            ICollection <Type> controllerTypes = new DefaultHttpControllerTypeResolver()
                                                 .GetControllerTypes(ControllerAssemblies);
            var resolver = new DefaultDependencyResolver(controllerTypes);
            var factory  = new DefaultControllerFactory();

            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, controllerTypes, resolver, factory);

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
        public void should_only_invoke_public_instance_method()
        {
            var matchedRoute = new HttpRoute("ControllerWithNonPublicAction", "Get", HttpMethod.Get);

            ICollection <Type> controllerTypes = new DefaultHttpControllerTypeResolver()
                                                 .GetControllerTypes(ControllerAssemblies);
            var resolver = new DefaultDependencyResolver(controllerTypes);
            var factory  = new DefaultControllerFactory();

            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, controllerTypes, resolver, factory);

            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
        }
        public void should_only_register_public_controller()
        {
            var matchedRoute = new HttpRoute("NonPublicController", "Get", HttpMethod.Get);

            ICollection <Type> controllerTypes = new DefaultHttpControllerTypeResolver()
                                                 .GetControllerTypes(ControllerAssemblies);
            var resolver = new DefaultDependencyResolver(controllerTypes);
            var factory  = new DefaultControllerFactory();

            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, controllerTypes, resolver, factory);

            Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
        }
        public void should_return_method_not_allowed_for_non_annotated_method()
        {
            var matchedRoute = new HttpRoute("ControllerWithoutMethodAnnotation", "Get", HttpMethod.Get);

            ICollection <Type> controllerTypes = new DefaultHttpControllerTypeResolver()
                                                 .GetControllerTypes(ControllerAssemblies);
            var resolver = new DefaultDependencyResolver(controllerTypes);
            var factory  = new DefaultControllerFactory();

            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, controllerTypes, resolver, factory);

            Assert.Equal(HttpStatusCode.MethodNotAllowed, response.StatusCode);
        }
        public void should_invoke_method_with_multiple_methods(string method)
        {
            var matchedRoute = new HttpRoute(
                typeof(ControllerWithMultipleMethodAnnotation),
                "Invoke",
                new HttpMethod(method));

            var controllerTypeResolver = new DefaultHttpControllerTypeResolver();
            var resolver = new DefaultDependencyResolver(controllerTypeResolver.GetControllerTypes(ControllerAssemblies));
            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, resolver);

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
        public void Decorator_GetInner_ReturnsOriginal()
        {
            // Arrange
            DefaultHttpControllerTypeResolver expectedResolver = HttpControllerTypeResolver.Object;
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            DefaultHttpControllerTypeResolver resolver = Decorator.GetInner(tracer as DefaultHttpControllerTypeResolver);

            // Assert
            Assert.NotNull(resolver);
            Assert.Same(expectedResolver, resolver);
        }
        public void InnerProperty_ReturnsOriginal()
        {
            // Arrange
            DefaultHttpControllerTypeResolver expectedResolver = HttpControllerTypeResolver.Object;
            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(HttpControllerTypeResolver.Object, traceWriter);

            // Act
            DefaultHttpControllerTypeResolver resolver = tracer.Inner;

            // Assert
            Assert.NotNull(resolver);
            Assert.Same(expectedResolver, resolver);
        }
        public void should_invoke_method_with_multiple_methods(string method)
        {
            var matchedRoute = new HttpRoute(
                "ControllerWithMultipleMethodAnnotation",
                "Invoke",
                new HttpMethod(method));

            ICollection <Type> controllerTypes = new DefaultHttpControllerTypeResolver()
                                                 .GetControllerTypes(ControllerAssemblies);
            var resolver = new DefaultDependencyResolver(controllerTypes);
            var factory  = new DefaultControllerFactory();

            HttpResponseMessage response = ControllerActionInvoker.InvokeAction(
                matchedRoute, controllerTypes, resolver, factory);

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
        public void IsControllerTypePredicateProperty_RoundTrips()
        {
            // Arrange
            Predicate <Type> expectedPredicate         = type => type != null;
            DefaultHttpControllerTypeResolver resolver = new DefaultHttpControllerTypeResolver(expectedPredicate);

            TestTraceWriter traceWriter = new TestTraceWriter();
            DefaultHttpControllerTypeResolverTracer tracer =
                new DefaultHttpControllerTypeResolverTracer(resolver, traceWriter);

            // Act
            Predicate <Type> predicate = tracer.IsControllerTypePredicate;

            // Assert
            Assert.NotNull(predicate);
            Assert.Same(expectedPredicate, predicate);
        }
        // NOTE: This method has been stolen from InitializeCache() private method in
        //   System.Web.Http.Dispatcher.HttpControllerTypeCache class of the
        //   ASP.NET Web API source code, with a little change.
        private Dictionary <string, ILookup <string, Type> > GetControllerTypeGroups()
        {
            IAssembliesResolver assembliesResolver = new DefaultAssembliesResolver();
            // NOTE: the above line was originally:
            //     _configuration.Services.GetAssembliesResolver();
            IHttpControllerTypeResolver controllersResolver = new DefaultHttpControllerTypeResolver();
            // NOTE: the above line was originally:
            //     _configuration.Services.GetHttpControllerTypeResolver();

            ICollection <Type> controllerTypes = controllersResolver.GetControllerTypes(assembliesResolver);
            var groupedByName = controllerTypes.GroupBy(
                t => t.Name.Substring(0, t.Name.Length - DefaultHttpControllerSelector.ControllerSuffix.Length),
                StringComparer.OrdinalIgnoreCase);

            return(groupedByName.ToDictionary(
                       g => g.Key,
                       g => g.ToLookup(t => t.Namespace ?? String.Empty, StringComparer.OrdinalIgnoreCase),
                       StringComparer.OrdinalIgnoreCase));
        }