diff --git a/dotnet/src/Functions/Functions.OpenApi/Extensions/RestApiOperationExtensions.cs b/dotnet/src/Functions/Functions.OpenApi/Extensions/RestApiOperationExtensions.cs index ff0e8f0b9c2e..86786c08b8a8 100644 --- a/dotnet/src/Functions/Functions.OpenApi/Extensions/RestApiOperationExtensions.cs +++ b/dotnet/src/Functions/Functions.OpenApi/Extensions/RestApiOperationExtensions.cs @@ -179,6 +179,7 @@ private static List GetParametersFromPayloadMetadata( expand: false, RestApiOperationParameterLocation.Body, RestApiOperationParameterStyle.Simple, + defaultValue: property.DefaultValue, description: property.Description, schema: property.Schema)); } diff --git a/dotnet/src/Functions/Functions.OpenApi/Model/RestApiOperationParameter.cs b/dotnet/src/Functions/Functions.OpenApi/Model/RestApiOperationParameter.cs index e42116ccb426..c6d8f3f1c8a0 100644 --- a/dotnet/src/Functions/Functions.OpenApi/Model/RestApiOperationParameter.cs +++ b/dotnet/src/Functions/Functions.OpenApi/Model/RestApiOperationParameter.cs @@ -50,7 +50,7 @@ public sealed class RestApiOperationParameter /// /// The default value. /// - public string? DefaultValue { get; } + public object? DefaultValue { get; } /// /// Specifies whether arrays and objects should generate separate parameters for each array item or object property. @@ -83,7 +83,7 @@ public RestApiOperationParameter( RestApiOperationParameterLocation location, RestApiOperationParameterStyle? style = null, string? arrayItemType = null, - string? defaultValue = null, + object? defaultValue = null, string? description = null, KernelJsonSchema? schema = null) { diff --git a/dotnet/src/Functions/Functions.OpenApi/Model/RestApiOperationPayloadProperty.cs b/dotnet/src/Functions/Functions.OpenApi/Model/RestApiOperationPayloadProperty.cs index 1b307765865d..f83152ea1d0e 100644 --- a/dotnet/src/Functions/Functions.OpenApi/Model/RestApiOperationPayloadProperty.cs +++ b/dotnet/src/Functions/Functions.OpenApi/Model/RestApiOperationPayloadProperty.cs @@ -39,22 +39,30 @@ public sealed class RestApiOperationPayloadProperty /// public KernelJsonSchema? Schema { get; } + /// + /// The default value. + /// + public object? DefaultValue { get; } + /// /// Creates an instance of a class. /// - /// Property name. - /// Property type. - /// Flag specifying if the property is required or not. - /// Properties. - /// Property description. + /// The name of the property. + /// The type of the property. + /// A flag specifying if the property is required or not. + /// A list of properties for the payload property. + /// A description of the property. /// The schema of the payload property. + /// The default value of the property. + /// Returns a new instance of the class. public RestApiOperationPayloadProperty( string name, string type, bool isRequired, IList properties, string? description = null, - KernelJsonSchema? schema = null) + KernelJsonSchema? schema = null, + object? defaultValue = null) { this.Name = name; this.Type = type; @@ -62,5 +70,6 @@ public RestApiOperationPayloadProperty( this.Description = description; this.Properties = properties; this.Schema = schema; + this.DefaultValue = defaultValue; } } diff --git a/dotnet/src/Functions/Functions.OpenApi/OpenApi/OpenApiDocumentParser.cs b/dotnet/src/Functions/Functions.OpenApi/OpenApi/OpenApiDocumentParser.cs index b270f185f2ea..392894abc8dc 100644 --- a/dotnet/src/Functions/Functions.OpenApi/OpenApi/OpenApiDocumentParser.cs +++ b/dotnet/src/Functions/Functions.OpenApi/OpenApi/OpenApiDocumentParser.cs @@ -2,7 +2,6 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Linq; using System.Net.Http; @@ -313,7 +312,8 @@ private static List GetPayloadProperties(string requiredProperties.Contains(propertyName), GetPayloadProperties(operationId, propertySchema, requiredProperties, level + 1), propertySchema.Description, - propertySchema.ToJsonSchema()); + propertySchema.ToJsonSchema(), + GetParameterValue(propertySchema.Default)); result.Add(property); } @@ -326,7 +326,7 @@ private static List GetPayloadProperties(string /// /// The value metadata. /// The parameter value. - private static string? GetParameterValue(IOpenApiAny valueMetadata) + private static object? GetParameterValue(IOpenApiAny valueMetadata) { if (valueMetadata is not IOpenApiPrimitive value) { @@ -335,17 +335,17 @@ private static List GetPayloadProperties(string return value.PrimitiveType switch { - PrimitiveType.Integer => ((OpenApiInteger)value).Value.ToString(CultureInfo.InvariantCulture), - PrimitiveType.Long => ((OpenApiLong)value).Value.ToString(CultureInfo.InvariantCulture), - PrimitiveType.Float => ((OpenApiFloat)value).Value.ToString(CultureInfo.InvariantCulture), - PrimitiveType.Double => ((OpenApiDouble)value).Value.ToString(CultureInfo.InvariantCulture), - PrimitiveType.String => ((OpenApiString)value).Value.ToString(CultureInfo.InvariantCulture), - PrimitiveType.Byte => Convert.ToBase64String(((OpenApiByte)value).Value), - PrimitiveType.Binary => Encoding.UTF8.GetString(((OpenApiBinary)value).Value), - PrimitiveType.Boolean => ((OpenApiBoolean)value).Value.ToString(CultureInfo.InvariantCulture), - PrimitiveType.Date => ((OpenApiDate)value).Value.ToString("o").Substring(0, 10), - PrimitiveType.DateTime => ((OpenApiDateTime)value).Value.ToString(CultureInfo.InvariantCulture), - PrimitiveType.Password => ((OpenApiPassword)value).Value.ToString(CultureInfo.InvariantCulture), + PrimitiveType.Integer => ((OpenApiInteger)value).Value, + PrimitiveType.Long => ((OpenApiLong)value).Value, + PrimitiveType.Float => ((OpenApiFloat)value).Value, + PrimitiveType.Double => ((OpenApiDouble)value).Value, + PrimitiveType.String => ((OpenApiString)value).Value, + PrimitiveType.Byte => ((OpenApiByte)value).Value, + PrimitiveType.Binary => ((OpenApiBinary)value).Value, + PrimitiveType.Boolean => ((OpenApiBoolean)value).Value, + PrimitiveType.Date => ((OpenApiDate)value).Value, + PrimitiveType.DateTime => ((OpenApiDateTime)value).Value, + PrimitiveType.Password => ((OpenApiPassword)value).Value, _ => throw new KernelException($"The value type - {value.PrimitiveType} is not supported."), }; } diff --git a/dotnet/src/Functions/Functions.UnitTests/OpenApi/Extensions/RestApiOperationExtensionsTests.cs b/dotnet/src/Functions/Functions.UnitTests/OpenApi/Extensions/RestApiOperationExtensionsTests.cs index 790a5284d86b..e20836b38309 100644 --- a/dotnet/src/Functions/Functions.UnitTests/OpenApi/Extensions/RestApiOperationExtensionsTests.cs +++ b/dotnet/src/Functions/Functions.UnitTests/OpenApi/Extensions/RestApiOperationExtensionsTests.cs @@ -280,18 +280,53 @@ private static RestApiOperation CreateTestOperation(string method, RestApiOperat private static RestApiOperationPayload CreateTestJsonPayload() { - var name = new RestApiOperationPayloadProperty("name", "string", true, new List(), "The name."); - - var leader = new RestApiOperationPayloadProperty("leader", "string", true, new List(), "The leader."); - - var landmarks = new RestApiOperationPayloadProperty("landmarks", "array", false, new List(), "The landmarks."); - var location = new RestApiOperationPayloadProperty("location", "object", true, new[] { landmarks }, "The location."); - - var rulingCouncil = new RestApiOperationPayloadProperty("rulingCouncil", "object", true, new[] { leader }, "The ruling council."); - - var population = new RestApiOperationPayloadProperty("population", "integer", true, new List(), "The population."); - - var hasMagicWards = new RestApiOperationPayloadProperty("hasMagicWards", "boolean", false, new List()); + var name = new RestApiOperationPayloadProperty( + name: "name", + type: "string", + isRequired: true, + properties: new List(), + description: "The name."); + + var leader = new RestApiOperationPayloadProperty( + name: "leader", + type: "string", + isRequired: true, + properties: new List(), + description: "The leader."); + + var landmarks = new RestApiOperationPayloadProperty( + name: "landmarks", + type: "array", + isRequired: false, + properties: new List(), + description: "The landmarks."); + + var location = new RestApiOperationPayloadProperty( + name: "location", + type: "object", + isRequired: true, + properties: new[] { landmarks }, + description: "The location."); + + var rulingCouncil = new RestApiOperationPayloadProperty( + name: "rulingCouncil", + type: "object", + isRequired: true, + properties: new[] { leader }, + description: "The ruling council."); + + var population = new RestApiOperationPayloadProperty( + name: "population", + type: "integer", + isRequired: true, + properties: new List(), + description: "The population."); + + var hasMagicWards = new RestApiOperationPayloadProperty( + name: "hasMagicWards", + type: "boolean", + isRequired: false, + properties: new List()); return new RestApiOperationPayload("application/json", new[] { name, location, rulingCouncil, population, hasMagicWards }); } diff --git a/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV20Tests.cs b/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV20Tests.cs index 0669d0eeffcf..ab3150adb130 100644 --- a/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV20Tests.cs +++ b/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV20Tests.cs @@ -175,7 +175,7 @@ public async Task ItCanExtractSimpleTypeHeaderParameterMetadataSuccessfullyAsync var apiVersion = GetParameterMetadata(operations, "SetSecret", RestApiOperationParameterLocation.Header, "X-API-Version"); Assert.Equal("integer", apiVersion.Type); - Assert.Equal("10", apiVersion.DefaultValue); + Assert.Equal(10, apiVersion.DefaultValue); Assert.Equal("Requested API version.", apiVersion.Description); Assert.True(apiVersion.IsRequired); } @@ -225,7 +225,7 @@ public async Task ItCanExtractAllPathsAsOperationsAsync() var operations = await this._sut.ParseAsync(this._openApiDocument); // Assert - Assert.Equal(3, operations.Count); + Assert.Equal(4, operations.Count); } [Fact] @@ -293,6 +293,65 @@ public async Task ItCanParseResponsesSuccessfullyAsync() JsonSerializer.Serialize(response.Schema)); } + [Fact] + public async Task ItCanWorkWithDefaultParametersOfVariousTypesAsync() + { + //Act + var operations = await this._sut.ParseAsync(this._openApiDocument); + + //Assert + Assert.NotNull(operations); + Assert.True(operations.Any()); + + var operation = operations.Single(o => o.Id == "TestDefaultValues"); + Assert.NotNull(operation); + + var parameters = operation.GetParameters(); + Assert.Equal(11, parameters.Count); + + var stringParameter = parameters.Single(p => p.Name == "string-parameter"); + Assert.Equal("string-value", stringParameter.DefaultValue); + + var booleanParameter = parameters.Single(p => p.Name == "boolean-parameter"); + Assert.True(booleanParameter.DefaultValue is bool value); + + var integerParameter = parameters.Single(p => p.Name == "integer-parameter"); + Assert.True(integerParameter.DefaultValue is int); + Assert.Equal(281, integerParameter.DefaultValue); + + var longParameter = parameters.Single(p => p.Name == "long-parameter"); + Assert.True(longParameter.DefaultValue is long); + Assert.Equal((long)-2814, longParameter.DefaultValue); + + var floatParameter = parameters.Single(p => p.Name == "float-parameter"); + Assert.True(floatParameter.DefaultValue is float); + Assert.Equal((float)12.01, floatParameter.DefaultValue); + + var doubleParameter = parameters.Single(p => p.Name == "double-parameter"); + Assert.True(doubleParameter.DefaultValue is double); + Assert.Equal((double)-12.01, doubleParameter.DefaultValue); + + var encodedCharactersParameter = parameters.Single(p => p.Name == "encoded-characters-parameter"); + Assert.True(encodedCharactersParameter.DefaultValue is byte[]); + Assert.Equal(new byte[] { 1, 2, 3, 4, 5 }, encodedCharactersParameter.DefaultValue); + + var binaryDataParameter = parameters.Single(p => p.Name == "binary-data-parameter"); + Assert.True(binaryDataParameter.DefaultValue is byte[]); + Assert.Equal(new byte[] { 50, 51, 52, 53, 54 }, binaryDataParameter.DefaultValue); + + var dateParameter = parameters.Single(p => p.Name == "date-parameter"); + Assert.True(dateParameter.DefaultValue is DateTime); + Assert.Equal(new DateTime(2017, 07, 21), dateParameter.DefaultValue); + + var dateTimeParameter = parameters.Single(p => p.Name == "date-time-parameter"); + Assert.True(dateTimeParameter.DefaultValue is DateTimeOffset); + Assert.Equal(new DateTimeOffset(2017, 07, 21, 17, 32, 28, TimeSpan.Zero), dateTimeParameter.DefaultValue); + + var passwordParameter = parameters.Single(p => p.Name == "password-parameter"); + Assert.True(passwordParameter.DefaultValue is string); + Assert.Equal("password-value", passwordParameter.DefaultValue); + } + private static RestApiOperationParameter GetParameterMetadata(IList operations, string operationId, RestApiOperationParameterLocation location, string name) { diff --git a/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV30Tests.cs b/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV30Tests.cs index dbfc84652d5b..46dfdf8da801 100644 --- a/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV30Tests.cs +++ b/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV30Tests.cs @@ -161,7 +161,7 @@ public async Task ItCanExtractSimpleTypeHeaderParameterMetadataSuccessfullyAsync var apiVersion = GetParameterMetadata(operations, "SetSecret", RestApiOperationParameterLocation.Header, "X-API-Version"); Assert.Equal("integer", apiVersion.Type); - Assert.Equal("10", apiVersion.DefaultValue); + Assert.Equal(10, apiVersion.DefaultValue); Assert.Equal("Requested API version.", apiVersion.Description); Assert.True(apiVersion.IsRequired); } @@ -226,7 +226,7 @@ public async Task ItCanExtractAllPathsAsOperationsAsync() var operations = await this._sut.ParseAsync(this._openApiDocument); // Assert - Assert.Equal(3, operations.Count); + Assert.Equal(4, operations.Count); } [Fact] @@ -366,6 +366,65 @@ public async Task ItCanParseResponsesSuccessfullyAsync() JsonSerializer.Serialize(response.Schema)); } + [Fact] + public async Task ItCanWorkWithDefaultParametersOfVariousTypesAsync() + { + //Act + var operations = await this._sut.ParseAsync(this._openApiDocument); + + //Assert + Assert.NotNull(operations); + Assert.True(operations.Any()); + + var operation = operations.Single(o => o.Id == "TestDefaultValues"); + Assert.NotNull(operation); + + var parameters = operation.GetParameters(); + Assert.Equal(11, parameters.Count); + + var stringParameter = parameters.Single(p => p.Name == "string-parameter"); + Assert.Equal("string-value", stringParameter.DefaultValue); + + var booleanParameter = parameters.Single(p => p.Name == "boolean-parameter"); + Assert.True(booleanParameter.DefaultValue is bool value); + + var integerParameter = parameters.Single(p => p.Name == "integer-parameter"); + Assert.True(integerParameter.DefaultValue is int); + Assert.Equal(281, integerParameter.DefaultValue); + + var longParameter = parameters.Single(p => p.Name == "long-parameter"); + Assert.True(longParameter.DefaultValue is long); + Assert.Equal((long)-2814, longParameter.DefaultValue); + + var floatParameter = parameters.Single(p => p.Name == "float-parameter"); + Assert.True(floatParameter.DefaultValue is float); + Assert.Equal((float)12.01, floatParameter.DefaultValue); + + var doubleParameter = parameters.Single(p => p.Name == "double-parameter"); + Assert.True(doubleParameter.DefaultValue is double); + Assert.Equal((double)-12.01, doubleParameter.DefaultValue); + + var encodedCharactersParameter = parameters.Single(p => p.Name == "encoded-characters-parameter"); + Assert.True(encodedCharactersParameter.DefaultValue is byte[]); + Assert.Equal(new byte[] { 1, 2, 3, 4, 5 }, encodedCharactersParameter.DefaultValue); + + var binaryDataParameter = parameters.Single(p => p.Name == "binary-data-parameter"); + Assert.True(binaryDataParameter.DefaultValue is byte[]); + Assert.Equal(new byte[] { 50, 51, 52, 53, 54 }, binaryDataParameter.DefaultValue); + + var dateParameter = parameters.Single(p => p.Name == "date-parameter"); + Assert.True(dateParameter.DefaultValue is DateTime); + Assert.Equal(new DateTime(2017, 07, 21), dateParameter.DefaultValue); + + var dateTimeParameter = parameters.Single(p => p.Name == "date-time-parameter"); + Assert.True(dateTimeParameter.DefaultValue is DateTimeOffset); + Assert.Equal(new DateTimeOffset(2017, 07, 21, 17, 32, 28, TimeSpan.Zero), dateTimeParameter.DefaultValue); + + var passwordParameter = parameters.Single(p => p.Name == "password-parameter"); + Assert.True(passwordParameter.DefaultValue is string); + Assert.Equal("password-value", passwordParameter.DefaultValue); + } + private static MemoryStream ModifyOpenApiDocument(Stream openApiDocument, Action transformer) { var json = JsonSerializer.Deserialize(openApiDocument); diff --git a/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV31Tests.cs b/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV31Tests.cs index e6cecebfcef9..b927829e2e18 100644 --- a/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV31Tests.cs +++ b/dotnet/src/Functions/Functions.UnitTests/OpenApi/OpenApiDocumentParserV31Tests.cs @@ -176,7 +176,7 @@ public async Task ItCanExtractSimpleTypeHeaderParameterMetadataSuccessfullyAsync var apiVersion = GetParameterMetadata(operations, "SetSecret", RestApiOperationParameterLocation.Header, "X-API-Version"); Assert.Equal("integer", apiVersion.Type); - Assert.Equal("10", apiVersion.DefaultValue); + Assert.Equal(10, apiVersion.DefaultValue); Assert.Equal("Requested API version.", apiVersion.Description); Assert.True(apiVersion.IsRequired); } @@ -226,7 +226,7 @@ public async Task ItCanExtractAllPathsAsOperationsAsync() var operations = await this._sut.ParseAsync(this._openApiDocument); // Assert - Assert.Equal(3, operations.Count); + Assert.Equal(4, operations.Count); } [Fact] @@ -343,6 +343,65 @@ public async Task ItCanParseResponsesSuccessfullyAsync() JsonSerializer.Serialize(response.Schema)); } + [Fact] + public async Task ItCanWorkWithDefaultParametersOfVariousTypesAsync() + { + //Act + var operations = await this._sut.ParseAsync(this._openApiDocument); + + //Assert + Assert.NotNull(operations); + Assert.True(operations.Any()); + + var operation = operations.Single(o => o.Id == "TestDefaultValues"); + Assert.NotNull(operation); + + var parameters = operation.GetParameters(); + Assert.Equal(11, parameters.Count); + + var stringParameter = parameters.Single(p => p.Name == "string-parameter"); + Assert.Equal("string-value", stringParameter.DefaultValue); + + var booleanParameter = parameters.Single(p => p.Name == "boolean-parameter"); + Assert.True(booleanParameter.DefaultValue is bool value); + + var integerParameter = parameters.Single(p => p.Name == "integer-parameter"); + Assert.True(integerParameter.DefaultValue is int); + Assert.Equal(281, integerParameter.DefaultValue); + + var longParameter = parameters.Single(p => p.Name == "long-parameter"); + Assert.True(longParameter.DefaultValue is long); + Assert.Equal((long)-2814, longParameter.DefaultValue); + + var floatParameter = parameters.Single(p => p.Name == "float-parameter"); + Assert.True(floatParameter.DefaultValue is float); + Assert.Equal((float)12.01, floatParameter.DefaultValue); + + var doubleParameter = parameters.Single(p => p.Name == "double-parameter"); + Assert.True(doubleParameter.DefaultValue is double); + Assert.Equal((double)-12.01, doubleParameter.DefaultValue); + + var encodedCharactersParameter = parameters.Single(p => p.Name == "encoded-characters-parameter"); + Assert.True(encodedCharactersParameter.DefaultValue is byte[]); + Assert.Equal(new byte[] { 1, 2, 3, 4, 5 }, encodedCharactersParameter.DefaultValue); + + var binaryDataParameter = parameters.Single(p => p.Name == "binary-data-parameter"); + Assert.True(binaryDataParameter.DefaultValue is byte[]); + Assert.Equal(new byte[] { 50, 51, 52, 53, 54 }, binaryDataParameter.DefaultValue); + + var dateParameter = parameters.Single(p => p.Name == "date-parameter"); + Assert.True(dateParameter.DefaultValue is DateTime); + Assert.Equal(new DateTime(2017, 07, 21), dateParameter.DefaultValue); + + var dateTimeParameter = parameters.Single(p => p.Name == "date-time-parameter"); + Assert.True(dateTimeParameter.DefaultValue is DateTimeOffset); + Assert.Equal(new DateTimeOffset(2017, 07, 21, 17, 32, 28, TimeSpan.Zero), dateTimeParameter.DefaultValue); + + var passwordParameter = parameters.Single(p => p.Name == "password-parameter"); + Assert.True(passwordParameter.DefaultValue is string); + Assert.Equal("password-value", passwordParameter.DefaultValue); + } + private static MemoryStream ModifyOpenApiDocument(Stream openApiDocument, Action> transformer) { var serializer = new SharpYaml.Serialization.Serializer(); diff --git a/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV2_0.json b/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV2_0.json index 55709c56583c..4c323deb97a8 100644 --- a/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV2_0.json +++ b/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV2_0.json @@ -212,7 +212,7 @@ { "in": "body", "name": "body", - "description": "excuse event", + "description": "excuse event", "schema": { "type": "string" } @@ -227,6 +227,101 @@ } } } + }, + "/test-default-values/{string-parameter}": { + "put": { + "description": "Operation to test default parameter values.", + "operationId": "TestDefaultValues", + "parameters": [ + { + "in": "path", + "name": "string-parameter", + "default": "string-value", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "boolean-parameter", + "type": "boolean", + "default": true + }, + { + "in": "header", + "name": "integer-parameter", + "type": "integer", + "format": "int32", + "default": 281 + }, + { + "in": "header", + "name": "long-parameter", + "type": "integer", + "format": "int64", + "default": -2814 + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "attributes": { + "description": "attributes", + "properties": { + "double-parameter": { + "type": "number", + "format": "double", + "default": -12.01 + } + }, + "type": "object" + }, + "float-parameter": { + "type": "number", + "format": "float", + "default": 12.01 + }, + "encoded-characters-parameter": { + "type": "string", + "format": "byte", + "default": "AQIDBAU=" + }, + "binary-data-parameter": { + "type": "string", + "format": "binary", + "default": "23456" + }, + "date-parameter": { + "type": "string", + "format": "date", + "default": "2017-07-21" + }, + "date-time-parameter": { + "type": "string", + "format": "date-time", + "default": "2017-07-21T17:32:28Z" + }, + "password-parameter": { + "type": "string", + "format": "password", + "default": "password-value" + } + }, + "type": "object" + } + } + ], + "responses": { + "200": { + "description": "The OK response", + "schema": { + "type": "string" + } + } + }, + "summary": "Get secret" + } } }, "produces": [], diff --git a/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV3_0.json b/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV3_0.json index eac3eace5ee2..ace59229a42d 100644 --- a/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV3_0.json +++ b/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV3_0.json @@ -201,6 +201,109 @@ } } } + }, + "/test-default-values/{string-parameter}": { + "put": { + "summary": "Operation to test default parameter values.", + "description": "Operation to test default parameter values.", + "operationId": "TestDefaultValues", + "parameters": [ + { + "name": "string-parameter", + "in": "path", + "required": true, + "schema": { + "type": "string", + "default": "string-value" + } + }, + { + "name": "boolean-parameter", + "in": "query", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "integer-parameter", + "in": "header", + "schema": { + "type": "integer", + "format": "int32", + "default": 281 + } + }, + { + "name": "long-parameter", + "in": "header", + "schema": { + "type": "integer", + "format": "int64", + "default": -2814 + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attributes": { + "type": "object", + "properties": { + "double-parameter": { + "type": "number", + "format": "double", + "default": -12.01 + } + }, + "description": "attributes" + }, + "float-parameter": { + "type": "number", + "format": "float", + "default": 12.01 + }, + "encoded-characters-parameter": { + "type": "string", + "format": "byte", + "default": "AQIDBAU=" + }, + "binary-data-parameter": { + "type": "string", + "format": "binary", + "default": "23456" + }, + "date-parameter": { + "type": "string", + "format": "date", + "default": "2017-07-21" + }, + "date-time-parameter": { + "type": "string", + "format": "date-time", + "default": "2017-07-21T17:32:28.0000000+00:00" + }, + "password-parameter": { + "type": "string", + "format": "password", + "default": "password-value" + } + } + } + } + }, + "required": true, + "x-bodyName": "body" + }, + "responses": { + "200": { + "description": "The OK response" + } + } + } } }, "components": { diff --git a/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV3_1.yaml b/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV3_1.yaml index 2552d4d348e2..3dba0c595748 100644 --- a/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV3_1.yaml +++ b/dotnet/src/Functions/Functions.UnitTests/OpenApi/TestPlugins/documentV3_1.yaml @@ -35,7 +35,6 @@ paths: - name: explodeFormParam in: query style: form - explode: true schema: type: array items: @@ -133,6 +132,78 @@ paths: text/plain: schema: type: string + '/test-default-values/{string-parameter}': + put: + summary: Operation to test default parameter values. + description: Operation to test default parameter values. + operationId: TestDefaultValues + parameters: + - name: string-parameter + in: path + required: true + schema: + type: string + default: string-value + - name: boolean-parameter + in: query + schema: + type: boolean + default: true + - name: integer-parameter + in: header + schema: + type: integer + format: int32 + default: 281 + - name: long-parameter + in: header + schema: + type: integer + format: int64 + default: -2814 + requestBody: + content: + application/json: + schema: + type: object + properties: + attributes: + type: object + properties: + double-parameter: + type: number + format: double + default: -12.01 + description: attributes + float-parameter: + type: number + format: float + default: 12.01 + encoded-characters-parameter: + type: string + format: byte + default: AQIDBAU= + binary-data-parameter: + type: string + format: binary + default: '23456' + date-parameter: + type: string + format: date + default: '2017-07-21' + date-time-parameter: + type: string + format: date-time + default: '2017-07-21T17:32:28.0000000+00:00' + password-parameter: + type: string + format: password + default: password-value + required: true + x-bodyName: body + responses: + '200': + description: The OK response components: securitySchemes: oauth2_auth: