public void Apply_SetsDescriptionAndExample_FromPropertySummaryAndExampleTags() { var requestBody = new OpenApiRequestBody { Content = new Dictionary <string, OpenApiMediaType> { ["application/json"] = new OpenApiMediaType { Schema = new OpenApiSchema { Type = "string" } } } }; var bodyParameterDescription = new ApiParameterDescription { ModelMetadata = ModelMetadataFactory.CreateForProperty(typeof(XmlAnnotatedType), nameof(XmlAnnotatedType.StringProperty)) }; var filterContext = new RequestBodyFilterContext(bodyParameterDescription, null, null, null); Subject().Apply(requestBody, filterContext); Assert.Equal("Summary for StringProperty", requestBody.Description); Assert.NotNull(requestBody.Content["application/json"].Example); Assert.Equal("\"Example for StringProperty\"", requestBody.Content["application/json"].Example.ToJson()); }
public void Apply_SetsParameterDescriptions_FromCorrespondingPropertySummaryTags() { var operation = new OpenApiOperation { Parameters = new List <OpenApiParameter> { new OpenApiParameter { Name = "BoolProperty" } }, Responses = new OpenApiResponses() }; var filterContext = FilterContextFor ( ApiDescriptionFactory.Create <FakeControllerWithXmlComments>( c => nameof(c.ActionWithNoParameters), groupName: "v1", httpMethod: "POST", relativePath: "resource", parameterDescriptions: new[] { new ApiParameterDescription { Name = "BoolProperty", Source = BindingSource.Query, ModelMetadata = ModelMetadataFactory.CreateForProperty(typeof(XmlAnnotatedType), "BoolProperty") } }) ); Subject().Apply(operation, filterContext); Assert.Equal("Summary for BoolProperty", operation.Parameters[0].Description); }
public void Apply_SetsDescription_FromPropertySummaryTag() { var requestBody = new OpenApiRequestBody(); var bodyParameterDescription = new ApiParameterDescription { ModelMetadata = ModelMetadataFactory.CreateForProperty(typeof(XmlAnnotatedType), nameof(XmlAnnotatedType.StringProperty)) }; var filterContext = new RequestBodyFilterContext(bodyParameterDescription, null, null, null); Subject().Apply(requestBody, filterContext); Assert.Equal("Summary for StringProperty", requestBody.Description); }
public void GetSwagger_SetsParameterRequired_ForNonControllerActionDescriptor_IfApiParameterDescriptionForBodyIsRequired(bool isRequired) { void Execute(object obj) { } Action <object> action = Execute; var actionDescriptor = new ActionDescriptor { RouteValues = new Dictionary <string, string> { ["controller"] = "Foo", } }; var parameter = new ApiParameterDescription { Name = "obj", Source = BindingSource.Body, IsRequired = isRequired, Type = typeof(object), ModelMetadata = ModelMetadataFactory.CreateForParameter(action.Method.GetParameters()[0]) }; var subject = Subject( apiDescriptions: new[] { ApiDescriptionFactory.Create(actionDescriptor, action.Method, groupName: "v1", httpMethod: "POST", relativePath: "resource", parameterDescriptions: new[] { parameter }), } ); var document = subject.GetSwagger("v1"); Assert.Equal(isRequired, document.Paths["/resource"].Operations[OperationType.Post].RequestBody.Required); }
public static ApiDescription Create( MethodInfo methodInfo, string groupName, string httpMethod, string relativePath, IEnumerable <ApiParameterDescription> parameterDescriptions = null, IEnumerable <ApiRequestFormat> supportedRequestFormats = null, IEnumerable <ApiResponseType> supportedResponseTypes = null) { var actionDescriptor = CreateActionDescriptor(methodInfo); var apiDescription = new ApiDescription { ActionDescriptor = actionDescriptor, GroupName = groupName, HttpMethod = httpMethod, RelativePath = relativePath, }; if (parameterDescriptions != null) { foreach (var parameter in parameterDescriptions) { // If the provided action has a matching parameter - use it to assign ParameterDescriptor & ModelMetadata var controllerParameterDescriptor = actionDescriptor.Parameters .OfType <ControllerParameterDescriptor>() .FirstOrDefault(parameterDescriptor => parameterDescriptor.Name == parameter.Name); if (controllerParameterDescriptor != null) { parameter.ParameterDescriptor = controllerParameterDescriptor; parameter.ModelMetadata = ModelMetadataFactory.CreateForParameter(controllerParameterDescriptor.ParameterInfo); } apiDescription.ParameterDescriptions.Add(parameter); } } if (supportedRequestFormats != null) { foreach (var requestFormat in supportedRequestFormats) { apiDescription.SupportedRequestFormats.Add(requestFormat); } } if (supportedResponseTypes != null) { foreach (var responseType in supportedResponseTypes) { // If the provided action has a return value AND the response status is 2XX - use it to assign ModelMetadata if (methodInfo.ReturnType != null && responseType.StatusCode / 100 == 2) { responseType.ModelMetadata = ModelMetadataFactory.CreateForType(methodInfo.ReturnType); } apiDescription.SupportedResponseTypes.Add(responseType); } } return(apiDescription); }