private static ApiResponseTypeProvider GetProvider() { var mvcOptions = new MvcOptions { OutputFormatters = { new TestOutputFormatter() }, }; var provider = new ApiResponseTypeProvider(new EmptyModelMetadataProvider(), new ActionResultTypeMapper(), mvcOptions); return(provider); }
public void GetApiResponseTypes_ReturnNoResponseTypes_IfActionWithIResultReturnType() { // Arrange var actionDescriptor = GetControllerActionDescriptor(typeof(TestController), nameof(TestController.GetIResult)); var provider = new ApiResponseTypeProvider(new EmptyModelMetadataProvider(), new ActionResultTypeMapper(), new MvcOptions()); // Act var result = provider.GetApiResponseTypes(actionDescriptor); // Assert Assert.False(result.Any()); }
/// <summary> /// Creates a new instance of <see cref="DefaultApiDescriptionProvider"/>. /// </summary> /// <param name="optionsAccessor">The accessor for <see cref="MvcOptions"/>.</param> /// <param name="constraintResolver">The <see cref="IInlineConstraintResolver"/> used for resolving inline /// constraints.</param> /// <param name="modelMetadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="mapper">The <see cref="IActionResultTypeMapper"/>.</param> /// <param name="routeOptions">The accessor for <see cref="RouteOptions"/>.</param> /// <remarks>The <paramref name="mapper"/> parameter is currently ignored.</remarks> public DefaultApiDescriptionProvider( IOptions <MvcOptions> optionsAccessor, IInlineConstraintResolver constraintResolver, IModelMetadataProvider modelMetadataProvider, IActionResultTypeMapper mapper, IOptions <RouteOptions> routeOptions) { _mvcOptions = optionsAccessor.Value; _constraintResolver = constraintResolver; _modelMetadataProvider = modelMetadataProvider; _responseTypeProvider = new ApiResponseTypeProvider(modelMetadataProvider, mapper, _mvcOptions); _routeOptions = routeOptions.Value; }
public void GetApiResponseTypes_HandlesActionWithMultipleContentTypesAndProduces() { // Arrange var actionDescriptor = GetControllerActionDescriptor(typeof(TestController), nameof(TestController.GetUser)); actionDescriptor.FilterDescriptors.Add(new FilterDescriptor(new ProducesAttribute("text/xml") { Type = typeof(BaseModel) }, FilterScope.Action)); actionDescriptor.FilterDescriptors.Add(new FilterDescriptor(new ProducesResponseTypeAttribute(typeof(ValidationProblemDetails), 400, "application/problem+json"), FilterScope.Action)); actionDescriptor.FilterDescriptors.Add(new FilterDescriptor(new ProducesResponseTypeAttribute(typeof(ProblemDetails), 404, "application/problem+json"), FilterScope.Action)); actionDescriptor.FilterDescriptors.Add(new FilterDescriptor(new ProducesResponseTypeAttribute(409), FilterScope.Action)); var provider = new ApiResponseTypeProvider(new EmptyModelMetadataProvider(), new ActionResultTypeMapper(), new MvcOptions()); // Act var result = provider.GetApiResponseTypes(actionDescriptor); // Assert Assert.Collection( result.OrderBy(r => r.StatusCode), responseType => { Assert.Equal(typeof(BaseModel), responseType.Type); Assert.Equal(200, responseType.StatusCode); Assert.Equal(new[] { "text/xml" }, GetSortedMediaTypes(responseType)); }, responseType => { Assert.Equal(typeof(ValidationProblemDetails), responseType.Type); Assert.Equal(400, responseType.StatusCode); Assert.Equal(new[] { "application/problem+json" }, GetSortedMediaTypes(responseType)); }, responseType => { Assert.Equal(typeof(ProblemDetails), responseType.Type); Assert.Equal(404, responseType.StatusCode); Assert.Equal(new[] { "application/problem+json" }, GetSortedMediaTypes(responseType)); }, responseType => { Assert.Equal(typeof(void), responseType.Type); Assert.Equal(409, responseType.StatusCode); Assert.Empty(GetSortedMediaTypes(responseType)); }); }