public void Has_V2_Mapping()
            {
                var selector = new VersionedControllerSelector(new HttpConfiguration());

                var mappings = selector.GetControllerMapping();

                Assert.IsNotNull(mappings.Keys.Where(key => key.StartsWith("v2")));
            }
            public void Selects_Default_Controller_When_No_Header_Present()
            {
                var config = new HttpConfiguration();
                config.Routes.MapHttpRoute(
                    "Default",
                    "api/{controller}/{action}",
                    new { controller = "Students", action = "Get" }
                );
                var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/");
                var routeData = config.Routes.GetRouteData(request);
                request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;

                var selector = new VersionedControllerSelector(config);

                var descriptor = selector.SelectController(request);

                Assert.AreEqual(descriptor.ControllerType, typeof(StudentsController));
            }
            public void Selects_v1_Controller_When_V1_Accept_Specified()
            {
                var config = new HttpConfiguration();
                config.Routes.MapHttpRoute(
                    "Default",
                    "api/{controller}/{action}",
                    new { controller = "Students", action = "Get" }
                );
                var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/");
                var routeData = config.Routes.GetRouteData(request);
                request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/api.v1+json"));

                var selector = new VersionedControllerSelector(config);

                var descriptor = selector.SelectController(request);

                Assert.AreEqual(typeof(Controllers.v1.StudentsController), descriptor.ControllerType);
            }
            public void Throws_http_415_for_unknown_version_in_accept_header()
            {
                var config = new HttpConfiguration();
                config.Routes.MapHttpRoute(
                    "Default",
                    "api/{controller}/{action}",
                    new { controller = "Students", action = "Get" }
                );
                var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/");
                var routeData = config.Routes.GetRouteData(request);
                request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData;
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/api.v11+json"));

                var selector = new VersionedControllerSelector(config);
                var exceptional = false;

                try
                {
                    selector.SelectController(request);
                }
                catch (HttpResponseException ex)
                {
                    exceptional = true;
                    Assert.AreEqual(HttpStatusCode.UnsupportedMediaType, ex.Response.StatusCode);
                }

                Assert.IsTrue(exceptional, "Expected http 415 exception. None caught.");
            }