public void TryGetMethodInfo_GetsMethodInfo_IfControllerActionDescriptor()
        {
            var apiDescription = ApiDescriptionFactory.Create <FakeController>(c => nameof(c.ActionWithNoParameters), groupName: "v1", httpMethod: "POST", relativePath: "/");

            var result = apiDescription.TryGetMethodInfo(out var methodInfo);

            Assert.True(result);
            Assert.NotNull(methodInfo);
        }
        /// <summary>
        /// Remove Paths and Components from OpenApi documentation for specific controller without accepted roles.
        /// </summary>
        /// <param name="openApiDoc"><see cref="OpenApiDocument"/>.</param>
        /// <param name="acceptedRoles">Collection of accepted roles.</param>
        /// <returns>
        /// Returns <see cref="OpenApiDocument"/>.
        /// </returns>
        public static OpenApiDocument RemovePathsAndComponentsWithoutAcceptedRolesForController<TController>(this OpenApiDocument openApiDoc,
            IReadOnlyList<string> acceptedRoles) where TController : class
        {
            var paths = new Dictionary<(MethodInfo, Type), string>();
            foreach (var methodInfo in typeof(TController).GetMethods().Where(m => !m.IsSpecialName))
            {
                var actionDescriptor = ApiDescriptionFactory.Create<TController>(methodInfo, typeof(TController).GetCustomAttribute<RouteAttribute>().Template)?.ActionDescriptor;
                if (actionDescriptor != null)
                {
                    paths.Add((((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)actionDescriptor).MethodInfo, typeof(TController)), actionDescriptor.AttributeRouteInfo.Template);
                }
            }
            HidePathsAndDefinitionsByRolesDocumentFilter.RemovePathsAndComponents(openApiDoc, paths, openApiDoc.Components.Schemas, acceptedRoles);

            return openApiDoc;
        }
        /// <summary>
        /// Remove Paths and Components from OpenApi documentation for specific controller action without accepted roles.
        /// </summary>
        /// <param name="openApiDoc"><see cref="OpenApiDocument"/>.</param>
        /// <param name="actionNameSelector">Action name selector.</param>
        /// <param name="acceptedRoles">Collection of accepted roles.</param>
        /// <returns>
        /// Returns <see cref="OpenApiDocument"/>.
        /// </returns>
        public static OpenApiDocument RemovePathsAndComponentsWithoutAcceptedRolesFor<TController>(this OpenApiDocument openApiDoc, Func<TController, string> actionNameSelector,
            IReadOnlyList<string> acceptedRoles) where TController : class, new()
        {
            var actionDescriptor = ApiDescriptionFactory.Create(actionNameSelector, typeof(TController).GetCustomAttribute<RouteAttribute>().Template)?.ActionDescriptor;
            if (actionDescriptor != null)
            {
                var paths = new Dictionary<(MethodInfo, Type), string>
                {
                    { (((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)actionDescriptor).MethodInfo, typeof(TController)), actionDescriptor.AttributeRouteInfo.Template }
                };

                HidePathsAndDefinitionsByRolesDocumentFilter.RemovePathsAndComponents(openApiDoc, paths, openApiDoc.Components.Schemas, acceptedRoles);
            }

            return openApiDoc;
        }
        public void Apply_CreatesMetadataForControllerNameTag_FromSwaggerTagAttribute()
        {
            var document       = new OpenApiDocument();
            var apiDescription = ApiDescriptionFactory.Create <FakeControllerWithSwaggerAnnotations>(c => nameof(c.ActionWithNoAttributes));
            var filterContext  = new DocumentFilterContext(
                apiDescriptions: new[] { apiDescription },
                schemaGenerator: null,
                schemaRepository: null);

            Subject().Apply(document, filterContext);

            var tag = document.Tags.Single(t => t.Name == "FakeControllerWithSwaggerAnnotations");

            Assert.Equal("Description for FakeControllerWithSwaggerAnnotations", tag.Description);
            Assert.Equal("http://tempuri.org/", tag.ExternalDocs.Url.ToString());
        }