public async Task Should_not_limit_to_HttpRequest_class_in_discovery() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerFunctionWithNonHttpRequestParam); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert swaggerDoc.Operations.Count().Should().Be(1); }
public async Task Should_ignore_OpenApiIgnore_attributed_function() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerIgnoredFunction2); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert swaggerDoc.Operations.Count().Should().Be(0); }
public async Task Should_have_body_type_automatically_discovered_from_custom_post_request_body_type() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerFunctionWithNonHttpRequestParam); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert swaggerDoc.Operations.Count().Should().Be(1); swaggerDoc.Operations.First().Operation.RequestBody.Name.Should().Be("req"); }
public async Task Should_include_security_spec_in_SwaggerDocument_from_authorize_attribute_with_defaults() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); settings.OperationProcessors.Add(new OperationSecurityProcessor("Basic", OpenApiSecuritySchemeType.Basic)); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerAuthorizeAttribute1); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert Assert.Equal(1, swaggerDoc.Operations.First().Operation.ActualSecurity.Count); }
public async Task Should_include_form_field_of_type_Dog_that_is_required() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(HttpExtensionTests.HttpExtensionsForm2); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(HttpExtensionTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].IsRequired.Should().Be(true); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.FormData); operation.ActualParameters[0].ActualSchema.Should().Be(swaggerDoc.Definitions["Dog"]); }
public async Task Should_include_body_of_type_XmlDocument_and_consume_xml() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(HttpExtensionTests.HttpExtensionsBody4); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(HttpExtensionTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.Body); operation.ActualParameters[0].Schema.Type.Should().Be(JsonObjectType.String); operation.ActualConsumes.Should().Contain("application/xml"); }
public async Task Should_include_body_of_type_string_that_is_required() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(HttpExtensionTests.HttpExtensionsBody2); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(HttpExtensionTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].IsRequired.Should().Be(true); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.Body); operation.ActualParameters[0].Schema.Type.Should().Be(JsonObjectType.String); }
public async Task Should_include_security_spec_in_SwaggerDocument_from_authorize_attribute_with_scheme_apikey_in_query() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); settings.OperationProcessors.Add(new OperationSecurityProcessor("QApiKey", OpenApiSecuritySchemeType.ApiKey, OpenApiSecurityApiKeyLocation.Query)); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerAuthorizeAttribute3); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; Assert.Equal(1, operation.ActualSecurity.Count); operation.ActualSecurity.First().Should().ContainKey("QApiKey"); }
public async Task Should_create_authorized_operation_from_HttpAuthorizeAttribute_inheriting_attributed_function() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); settings.OperationProcessors.Add(new OperationSecurityProcessor("Bearer", OpenApiSecuritySchemeType.OAuth2)); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(HttpExtensionTests.HttpExtensionsJwtAuth2); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(HttpExtensionTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(0); // HttpUser is not a HttpParam operation.Security.Count.Should().Be(1); operation.Security.First().Keys.Count.Should().Be(1); }
public async Task Should_include_required_formdata_field_with_type_string() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerFormDataAttribute1); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].Description.Should().Be("description"); operation.ActualParameters[0].Name.Should().Be("formField1"); operation.ActualParameters[0].IsRequired.Should().Be(true); operation.ActualParameters[0].Type.Should().Be(NJsonSchema.JsonObjectType.String); }
public async Task Should_include_queryparam_of_type_Dog_that_is_not_required() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(HttpExtensionTests.HttpExtensionsQueryParams3); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(HttpExtensionTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].Name.Should().Be("queryParam"); operation.ActualParameters[0].IsRequired.Should().Be(false); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.Query); operation.ActualParameters[0].Type.Should().Be(JsonObjectType.Object); operation.ActualParameters[0].ActualSchema.Should().Be(swaggerDoc.Definitions["Dog"]); }
public async Task Should_include_header_of_type_string_that_is_not_required() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerRequestHeaderAttribute1); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].Description.Should().Be("description"); operation.ActualParameters[0].Name.Should().Be("x-header"); operation.ActualParameters[0].IsRequired.Should().Be(false); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.Header); operation.ActualParameters[0].Type.Should().Be(JsonObjectType.String); }
public async Task Should_include_query_param_with_int_Type_not_required() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerQueryParamAttribute2); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].Description.Should().Be("Yet another description"); operation.ActualParameters[0].Name.Should().Be("queryParam"); operation.ActualParameters[0].IsRequired.Should().Be(false); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.Query); operation.ActualParameters[0].Type.Should().Be(NJsonSchema.JsonObjectType.Integer); }
public async Task Should_include_body_of_type_Person_that_is_required() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerRequestBodyTypeAttribute1); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].Description.Should().Be("description"); operation.ActualParameters[0].Name.Should().Be("Body"); operation.ActualParameters[0].IsRequired.Should().Be(true); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.Body); operation.ActualParameters[0].ActualSchema.Type.Should().Be(JsonObjectType.Object); operation.ActualParameters[0].ActualSchema.Should().Be(swaggerDoc.Definitions["Person"]); }
public async Task Should_include_formdatafile_field_with_multifile() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(GenerationAnnotationTests.SwaggerFormDataFileAttribute2); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(GenerationAnnotationTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(1); operation.ActualParameters[0].Description.Should().Be("description"); operation.ActualParameters[0].Name.Should().Be("files"); operation.ActualParameters[0].IsRequired.Should().Be(false); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.FormData); operation.ActualParameters[0].Type.Should().Be(NJsonSchema.JsonObjectType.File); operation.ActualParameters[0].CollectionFormat.Should().Be(OpenApiParameterCollectionFormat.Multi); }
public async Task Should_include_two_route_params_from_function_signature() { // Arrange var settings = new AzureFunctionsV2ToSwaggerGeneratorSettings(); var generator = new AzureFunctionsV2ToSwaggerGenerator(settings); var functionName = nameof(HttpExtensionsTestApp.RouteParamTests.RouteParamTest); // Act var swaggerDoc = await generator.GenerateForAzureFunctionClassAndSpecificMethodsAsync( typeof(HttpExtensionsTestApp.RouteParamTests), new List <string>() { functionName }); // Assert var operation = swaggerDoc.Operations.First().Operation; operation.ActualParameters.Count.Should().Be(2); operation.ActualParameters[0].Kind.Should().Be(OpenApiParameterKind.Path); operation.ActualParameters[1].Kind.Should().Be(OpenApiParameterKind.Path); operation.ActualParameters[0].IsRequired.Should().Be(true); operation.ActualParameters[1].IsRequired.Should().Be(true); operation.ActualParameters[0].Type.Should().Be(JsonObjectType.Integer); operation.ActualParameters[1].Type.Should().Be(JsonObjectType.String); }