public void apply_to_should_assign_model_with_declared_api_versions_from_mapped_convention_and_attributes()
        {
            // arrange
            var controllerBuilder    = new ControllerApiVersionConventionBuilder(typeof(DecoratedController));
            var actionBuilder        = new ActionApiVersionConventionBuilder(controllerBuilder);
            var controllerDescriptor = new HttpControllerDescriptor()
            {
                ControllerType = typeof(DecoratedController)
            };
            var method                = typeof(DecoratedController).GetMethod(nameof(DecoratedController.Get));
            var actionDescriptor      = new ReflectedHttpActionDescriptor(controllerDescriptor, method);
            var empty                 = Enumerable.Empty <ApiVersion>();
            var controllerVersionInfo = Tuple.Create(empty, empty, empty, empty);

            actionDescriptor.Properties[controllerVersionInfo.GetType()] = controllerVersionInfo;
            actionBuilder.MapToApiVersion(new ApiVersion(2, 0))
            .MapToApiVersion(new ApiVersion(3, 0));

            // act
            actionBuilder.ApplyTo(actionDescriptor);

            // assert
            actionDescriptor.GetApiVersionModel().Should().BeEquivalentTo(
                new
            {
                IsApiVersionNeutral    = false,
                DeclaredApiVersions    = new[] { new ApiVersion(2, 0), new ApiVersion(3, 0) },
                SupportedApiVersions   = new ApiVersion[0],
                DeprecatedApiVersions  = new ApiVersion[0],
                ImplementedApiVersions = new ApiVersion[0],
            });
        }
        public void apply_to_should_assign_model_with_declared_api_versions_from_mapped_convention()
        {
            // arrange
            var controllerBuilder = new ControllerApiVersionConventionBuilder(typeof(UndecoratedController));
            var actionBuilder     = new ActionApiVersionConventionBuilder(controllerBuilder);
            var actionDescriptor  = new Mock <HttpActionDescriptor>()
            {
                CallBase = true
            };
            var empty = Enumerable.Empty <ApiVersion>();
            var controllerVersionInfo = Tuple.Create(empty, empty, empty, empty);

            actionDescriptor.Setup(ad => ad.GetCustomAttributes <IApiVersionProvider>()).Returns(new Collection <IApiVersionProvider>());
            actionDescriptor.Object.Properties[controllerVersionInfo.GetType()] = controllerVersionInfo;
            actionBuilder.MapToApiVersion(new ApiVersion(2, 0));

            // act
            actionBuilder.ApplyTo(actionDescriptor.Object);

            // assert
            actionDescriptor.Object.GetApiVersionModel().Should().BeEquivalentTo(
                new
            {
                IsApiVersionNeutral    = false,
                DeclaredApiVersions    = new[] { new ApiVersion(2, 0) },
                SupportedApiVersions   = new ApiVersion[0],
                DeprecatedApiVersions  = new ApiVersion[0],
                ImplementedApiVersions = new ApiVersion[0],
            });
        }
        public void apply_to_should_assign_model_with_declared_api_versions_from_mapped_convention()
        {
            // arrange
            var controllerBuilder = new ControllerApiVersionConventionBuilder <UndecoratedController>();
            var actionBuilder     = new ActionApiVersionConventionBuilder <UndecoratedController>(controllerBuilder);
            var actionDescriptor  = new Mock <HttpActionDescriptor>()
            {
                CallBase = true
            };

            actionDescriptor.Setup(ad => ad.GetCustomAttributes <IApiVersionProvider>()).Returns(new Collection <IApiVersionProvider>());
            actionBuilder.MapToApiVersion(new ApiVersion(2, 0));

            // act
            actionBuilder.ApplyTo(actionDescriptor.Object);

            // assert
            actionDescriptor.Object.GetApiVersionModel().ShouldBeEquivalentTo(
                new
            {
                IsApiVersionNeutral    = false,
                DeclaredApiVersions    = new[] { new ApiVersion(2, 0) },
                SupportedApiVersions   = new[] { new ApiVersion(2, 0) },
                DeprecatedApiVersions  = new ApiVersion[0],
                ImplementedApiVersions = new[] { new ApiVersion(2, 0) }
            });
        }
        public void apply_to_should_assign_model_with_declared_api_versions_from_mapped_convention_and_attributes()
        {
            // arrange
            var controllerBuilder    = new ControllerApiVersionConventionBuilder <UndecoratedController>();
            var actionBuilder        = new ActionApiVersionConventionBuilder <UndecoratedController>(controllerBuilder);
            var controllerDescriptor = new HttpControllerDescriptor()
            {
                ControllerType = typeof(DecoratedController)
            };
            var method           = typeof(DecoratedController).GetMethod(nameof(DecoratedController.Get));
            var actionDescriptor = new ReflectedHttpActionDescriptor(controllerDescriptor, method);

            actionBuilder.MapToApiVersion(new ApiVersion(2, 0))
            .MapToApiVersion(new ApiVersion(3, 0));

            // act
            actionBuilder.ApplyTo(actionDescriptor);

            // assert
            actionDescriptor.GetApiVersionModel().ShouldBeEquivalentTo(
                new
            {
                IsApiVersionNeutral    = false,
                DeclaredApiVersions    = new[] { new ApiVersion(2, 0), new ApiVersion(3, 0) },
                SupportedApiVersions   = new[] { new ApiVersion(2, 0), new ApiVersion(3, 0) },
                DeprecatedApiVersions  = new ApiVersion[0],
                ImplementedApiVersions = new[] { new ApiVersion(2, 0), new ApiVersion(3, 0) }
            });
        }
        public void action_should_call_action_on_controller_builder()
        {
            // arrange
            var controllerBuilder = new Mock <ControllerApiVersionConventionBuilder>(typeof(UndecoratedController));
            var actionBuilder     = new ActionApiVersionConventionBuilder(controllerBuilder.Object);
            var method            = typeof(UndecoratedController).GetMethod(nameof(UndecoratedController.Get));

            controllerBuilder.Setup(cb => cb.Action(It.IsAny <MethodInfo>()));

            // act
            actionBuilder.Action(method);

            // assert
            controllerBuilder.Verify(cb => cb.Action(method), Once());
        }
Пример #6
0
        void ApplyActionConventions(HttpControllerDescriptor controller)
        {
            Contract.Requires(controller != null);

            var actionSelector = controller.Configuration.Services.GetActionSelector();
            var actions        = actionSelector.GetActionMapping(controller).SelectMany(g => g).ToArray();

            if (VersionNeutral)
            {
                controller.SetApiVersionModel(ApiVersionModel.Neutral);

                for (var i = 0; i < actions.Length; i++)
                {
                    actions[i].SetProperty(ApiVersionModel.Neutral);
                }

                return;
            }

            controller.SetApiVersionModel(new ApiVersionModel(SupportedVersions, DeprecatedVersions, AdvertisedVersions, DeprecatedAdvertisedVersions));

            var anyController = new ControllerApiVersionConventionBuilder(typeof(IHttpController));

            for (var i = 0; i < actions.Length; i++)
            {
                if (!(actions[i] is ReflectedHttpActionDescriptor action))
                {
                    continue;
                }

                var key = action.MethodInfo;

                if (!TryGetConvention(key, out var actionConvention))
                {
                    actionConvention = new ActionApiVersionConventionBuilder(anyController);
                }

                actionConvention.ApplyTo(action);
            }

            ApplyInheritedActionConventions(actions);
        }