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);
        }
Exemple #5
0
        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"]);
        }
Exemple #6
0
        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");
        }
Exemple #7
0
        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");
        }
Exemple #9
0
        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);
        }
Exemple #11
0
        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);
        }