diff --git a/src/client/interfaces/Model.d.ts b/src/client/interfaces/Model.d.ts index 057e52d8..13e722cb 100644 --- a/src/client/interfaces/Model.d.ts +++ b/src/client/interfaces/Model.d.ts @@ -9,7 +9,7 @@ export interface Model extends Schema { template: string | null; link: Model | null; description: string | null; - default?: any; + default?: string; imports: string[]; extends: string[]; enum: Enum[]; diff --git a/src/openApi/v2/parser/getOperationParameter.ts b/src/openApi/v2/parser/getOperationParameter.ts index 665c5985..48c078da 100644 --- a/src/openApi/v2/parser/getOperationParameter.ts +++ b/src/openApi/v2/parser/getOperationParameter.ts @@ -53,7 +53,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.template = definitionRef.template; operationParameter.imports.push(...definitionRef.imports); operationParameter.default = getOperationParameterDefault(parameter, operationParameter); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; return operationParameter; } @@ -66,7 +65,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.base = PrimaryType.STRING; operationParameter.enum.push(...extendedEnumerators); operationParameter.default = getOperationParameterDefault(parameter, operationParameter); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; return operationParameter; } } @@ -79,7 +77,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.base = PrimaryType.NUMBER; operationParameter.enum.push(...enumerators); operationParameter.default = getOperationParameterDefault(parameter, operationParameter); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; return operationParameter; } } @@ -92,7 +89,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.template = items.template; operationParameter.imports.push(...items.imports); operationParameter.default = getOperationParameterDefault(parameter, operationParameter); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; return operationParameter; } @@ -105,7 +101,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.imports.push(...items.imports); operationParameter.imports.push('Dictionary'); operationParameter.default = getOperationParameterDefault(parameter, operationParameter); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; return operationParameter; } @@ -118,7 +113,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.template = model.template; operationParameter.imports.push(...model.imports); operationParameter.default = getOperationParameterDefault(parameter, operationParameter); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; return operationParameter; } else { const model = getModel(openApi, parameter.schema); @@ -133,7 +127,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.enums.push(...model.enums); operationParameter.properties.push(...model.properties); operationParameter.default = getOperationParameterDefault(parameter, operationParameter); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; return operationParameter; } } @@ -147,7 +140,6 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.template = definitionType.template; operationParameter.imports.push(...definitionType.imports); operationParameter.default = getOperationParameterDefault(parameter, operationParameter); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; return operationParameter; } diff --git a/src/openApi/v2/parser/getOperationParameterDefault.ts b/src/openApi/v2/parser/getOperationParameterDefault.ts index 5471c213..9fd51cba 100644 --- a/src/openApi/v2/parser/getOperationParameterDefault.ts +++ b/src/openApi/v2/parser/getOperationParameterDefault.ts @@ -1,7 +1,7 @@ import { OperationParameter } from '../../../client/interfaces/OperationParameter'; import { OpenApiParameter } from '../interfaces/OpenApiParameter'; -export function getOperationParameterDefault(parameter: OpenApiParameter, operationParameter: OperationParameter): string | null { +export function getOperationParameterDefault(parameter: OpenApiParameter, operationParameter: OperationParameter): string | undefined { if (parameter.default === null) { return 'null'; } @@ -27,5 +27,5 @@ export function getOperationParameterDefault(parameter: OpenApiParameter, operat } } - return null; + return; } diff --git a/src/openApi/v2/parser/sortByRequired.ts b/src/openApi/v2/parser/sortByRequired.ts index bfcd0c7b..6ded692b 100644 --- a/src/openApi/v2/parser/sortByRequired.ts +++ b/src/openApi/v2/parser/sortByRequired.ts @@ -1,5 +1,27 @@ import { OperationParameter } from '../../../client/interfaces/OperationParameter'; +/** + * Sort by required and default values creating the following order: + * 1. Parameters that are required and have no default value + * 2. Parameters that are optional and have no default value + * 3. Parameters that are required and have a default value + * 4. Parameters that are optional and have a default value + * + * Resulting in the following order: + * + * function myFunction(param1: string, param2?: string, param3: string = 'hello') { + * ... + * } + * + * @param a + * @param b + */ export function sortByRequired(a: OperationParameter, b: OperationParameter): number { - return a.isRequired && !b.isRequired ? -1 : !a.isRequired && b.isRequired ? 1 : 0; + const aHasDefaultValue = a.default !== undefined; + const bHasDefaultValue = b.default !== undefined; + if (aHasDefaultValue && !bHasDefaultValue) return 1; + if (!aHasDefaultValue && bHasDefaultValue) return -1; + if (a.isRequired && !b.isRequired) return -1; + if (!a.isRequired && b.isRequired) return 1; + return 0; } diff --git a/src/openApi/v3/parser/getModelDefault.ts b/src/openApi/v3/parser/getModelDefault.ts index cfb317ab..3064efc7 100644 --- a/src/openApi/v3/parser/getModelDefault.ts +++ b/src/openApi/v3/parser/getModelDefault.ts @@ -1,7 +1,7 @@ import { Model } from '../../../client/interfaces/Model'; import { OpenApiSchema } from '../interfaces/OpenApiSchema'; -export function getModelDefault(definition: OpenApiSchema, model?: Model): string | null { +export function getModelDefault(definition: OpenApiSchema, model?: Model): string | undefined { if (definition.default === null) { return 'null'; } @@ -27,5 +27,5 @@ export function getModelDefault(definition: OpenApiSchema, model?: Model): strin } } - return null; + return; } diff --git a/src/openApi/v3/parser/getOperationParameter.ts b/src/openApi/v3/parser/getOperationParameter.ts index 73a12b73..721153bf 100644 --- a/src/openApi/v3/parser/getOperationParameter.ts +++ b/src/openApi/v3/parser/getOperationParameter.ts @@ -49,7 +49,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.template = model.template; operationParameter.imports.push(...model.imports); operationParameter.default = getModelDefault(parameter.schema); - operationParameter.isRequired = operationParameter.isRequired || operationParameter.default; + operationParameter.isRequired = operationParameter.isRequired; return operationParameter; } else { const model = getModel(openApi, parameter.schema); @@ -59,7 +59,7 @@ export function getOperationParameter(openApi: OpenApi, parameter: OpenApiParame operationParameter.template = model.template; operationParameter.link = model.link; operationParameter.isReadOnly = model.isReadOnly; - operationParameter.isRequired = operationParameter.isRequired || model.isRequired || model.default; + operationParameter.isRequired = operationParameter.isRequired || model.isRequired; operationParameter.isNullable = operationParameter.isNullable || model.isNullable; operationParameter.format = model.format; operationParameter.maximum = model.maximum; diff --git a/src/openApi/v3/parser/sortByRequired.ts b/src/openApi/v3/parser/sortByRequired.ts index bfcd0c7b..6ded692b 100644 --- a/src/openApi/v3/parser/sortByRequired.ts +++ b/src/openApi/v3/parser/sortByRequired.ts @@ -1,5 +1,27 @@ import { OperationParameter } from '../../../client/interfaces/OperationParameter'; +/** + * Sort by required and default values creating the following order: + * 1. Parameters that are required and have no default value + * 2. Parameters that are optional and have no default value + * 3. Parameters that are required and have a default value + * 4. Parameters that are optional and have a default value + * + * Resulting in the following order: + * + * function myFunction(param1: string, param2?: string, param3: string = 'hello') { + * ... + * } + * + * @param a + * @param b + */ export function sortByRequired(a: OperationParameter, b: OperationParameter): number { - return a.isRequired && !b.isRequired ? -1 : !a.isRequired && b.isRequired ? 1 : 0; + const aHasDefaultValue = a.default !== undefined; + const bHasDefaultValue = b.default !== undefined; + if (aHasDefaultValue && !bHasDefaultValue) return 1; + if (!aHasDefaultValue && bHasDefaultValue) return -1; + if (a.isRequired && !b.isRequired) return -1; + if (!a.isRequired && b.isRequired) return 1; + return 0; } diff --git a/src/templates/partials/isRequired.hbs b/src/templates/partials/isRequired.hbs index 50deb796..dbecae99 100644 --- a/src/templates/partials/isRequired.hbs +++ b/src/templates/partials/isRequired.hbs @@ -1 +1,5 @@ -{{#unless isRequired}}?{{/unless}} +{{#if @root.useOptions}} +{{~#unless isRequired}}?{{else if default}}?{{/unless~}} +{{else}} +{{~#unless isRequired}}{{#unless default}}?{{/unless}}{{/unless~}} +{{/if}} diff --git a/test/__snapshots__/index.spec.js.snap b/test/__snapshots__/index.spec.js.snap index c9516210..c28bedfc 100644 --- a/test/__snapshots__/index.spec.js.snap +++ b/test/__snapshots__/index.spec.js.snap @@ -1999,11 +1999,11 @@ import { OpenAPI } from '../core/OpenAPI'; export class DefaultsService { /** - * @param parameterString This is a simple string - * @param parameterNumber This is a simple number - * @param parameterBoolean This is a simple boolean - * @param parameterEnum This is a simple enum - * @param parameterModel This is a simple model + * @param parameterString This is a simple string with default value + * @param parameterNumber This is a simple number with default value + * @param parameterBoolean This is a simple boolean with default value + * @param parameterEnum This is a simple enum with default value + * @param parameterModel This is a simple model with default value * @throws ApiError */ public static async callWithDefaultParameters({ @@ -2015,11 +2015,11 @@ export class DefaultsService { \\"prop\\": \\"Hello World\\" }, }: { - parameterString: string, - parameterNumber: number, - parameterBoolean: boolean, - parameterEnum: ('Success' | 'Warning' | 'Error'), - parameterModel: ModelThatExtends | ModelThatExtendsExtends | ModelWithString, + parameterString?: string, + parameterNumber?: number, + parameterBoolean?: boolean, + parameterEnum?: ('Success' | 'Warning' | 'Error'), + parameterModel?: ModelThatExtends | ModelThatExtendsExtends | ModelWithString, }): Promise { const result = await __request({ @@ -2039,6 +2039,90 @@ export class DefaultsService { return result.body; } + /** + * @param parameterString This is a simple string that is optional with default value + * @param parameterNumber This is a simple number that is optional with default value + * @param parameterBoolean This is a simple boolean that is optional with default value + * @param parameterEnum This is a simple enum that is optional with default value + * @param parameterModel This is a simple model that is optional with default value + * @throws ApiError + */ + public static async callWithDefaultOptionalParameters({ + parameterString = 'Hello World!', + parameterNumber = 123, + parameterBoolean = true, + parameterEnum = 'Success', + parameterModel = { + \\"prop\\": \\"Hello World\\" + }, + }: { + parameterString?: string, + parameterNumber?: number, + parameterBoolean?: boolean, + parameterEnum?: ('Success' | 'Warning' | 'Error'), + parameterModel?: ModelThatExtends | ModelThatExtendsExtends | ModelWithString, + }): Promise { + + const result = await __request({ + method: 'post', + path: \`/api/v\${OpenAPI.VERSION}/defaults\`, + query: { + 'parameterString': parameterString, + 'parameterNumber': parameterNumber, + 'parameterBoolean': parameterBoolean, + 'parameterEnum': parameterEnum, + 'parameterModel': parameterModel, + }, + }); + + catchGenericError(result); + + return result.body; + } + + /** + * @param parameterStringWithNoDefault This is a string with no default + * @param parameterOptionalStringWithNoDefault This is a optional string with no default + * @param parameterStringWithDefault This is a string with default + * @param parameterStringWithEmptyDefault This is a string with empty default + * @param parameterOptionalStringWithDefault This is a optional string with default + * @param parameterOptionalStringWithEmptyDefault This is a optional string with empty default + * @throws ApiError + */ + public static async callToTestOrderOfParams({ + parameterStringWithNoDefault, + parameterOptionalStringWithNoDefault, + parameterStringWithDefault = 'hello', + parameterStringWithEmptyDefault = '', + parameterOptionalStringWithDefault = 'Hello World!', + parameterOptionalStringWithEmptyDefault = '', + }: { + parameterStringWithNoDefault: string, + parameterOptionalStringWithNoDefault?: string, + parameterStringWithDefault?: string, + parameterStringWithEmptyDefault?: string, + parameterOptionalStringWithDefault?: string, + parameterOptionalStringWithEmptyDefault?: string, + }): Promise { + + const result = await __request({ + method: 'put', + path: \`/api/v\${OpenAPI.VERSION}/defaults\`, + query: { + 'parameterStringWithNoDefault': parameterStringWithNoDefault, + 'parameterOptionalStringWithNoDefault': parameterOptionalStringWithNoDefault, + 'parameterStringWithDefault': parameterStringWithDefault, + 'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault, + 'parameterOptionalStringWithDefault': parameterOptionalStringWithDefault, + 'parameterOptionalStringWithEmptyDefault': parameterOptionalStringWithEmptyDefault, + }, + }); + + catchGenericError(result); + + return result.body; + } + }" `; @@ -2476,14 +2560,14 @@ import { OpenAPI } from '../core/OpenAPI'; export class TypesService { /** - * @param parameterNumber This is a number parameter - * @param parameterString This is a string parameter - * @param parameterBoolean This is a boolean parameter - * @param parameterObject This is an object parameter * @param parameterArray This is an array parameter * @param parameterDictionary This is a dictionary parameter * @param parameterEnum This is an enum parameter * @param id This is a number parameter + * @param parameterNumber This is a number parameter + * @param parameterString This is a string parameter + * @param parameterBoolean This is a boolean parameter + * @param parameterObject This is an object parameter * @result number Response is a simple number * @result string Response is a simple string * @result boolean Response is a simple boolean @@ -2491,36 +2575,36 @@ export class TypesService { * @throws ApiError */ public static async types({ - parameterNumber = 123, - parameterString = 'default', - parameterBoolean = true, - parameterObject = null, parameterArray, parameterDictionary, parameterEnum, id, + parameterNumber = 123, + parameterString = 'default', + parameterBoolean = true, + parameterObject = null, }: { - parameterNumber: number, - parameterString: string, - parameterBoolean: boolean, - parameterObject: any, parameterArray: Array, parameterDictionary: Dictionary, parameterEnum: ('Success' | 'Warning' | 'Error'), id?: number, + parameterNumber?: number, + parameterString?: string, + parameterBoolean?: boolean, + parameterObject?: any, }): Promise { const result = await __request({ method: 'get', path: \`/api/v\${OpenAPI.VERSION}/types\`, query: { + 'parameterArray': parameterArray, + 'parameterDictionary': parameterDictionary, + 'parameterEnum': parameterEnum, 'parameterNumber': parameterNumber, 'parameterString': parameterString, 'parameterBoolean': parameterBoolean, 'parameterObject': parameterObject, - 'parameterArray': parameterArray, - 'parameterDictionary': parameterDictionary, - 'parameterEnum': parameterEnum, }, }); @@ -4660,11 +4744,11 @@ import { OpenAPI } from '../core/OpenAPI'; export class DefaultsService { /** - * @param parameterString This is a simple string - * @param parameterNumber This is a simple number - * @param parameterBoolean This is a simple boolean - * @param parameterEnum This is a simple enum - * @param parameterModel This is a simple model + * @param parameterString This is a simple string with default value + * @param parameterNumber This is a simple number with default value + * @param parameterBoolean This is a simple boolean with default value + * @param parameterEnum This is a simple enum with default value + * @param parameterModel This is a simple model with default value * @throws ApiError */ public static async callWithDefaultParameters({ @@ -4676,11 +4760,11 @@ export class DefaultsService { \\"prop\\": \\"Hello World\\" }, }: { - parameterString: string | null, - parameterNumber: number | null, - parameterBoolean: boolean | null, - parameterEnum: ('Success' | 'Warning' | 'Error'), - parameterModel: ModelThatExtends | ModelThatExtendsExtends | ModelWithString | null, + parameterString?: string | null, + parameterNumber?: number | null, + parameterBoolean?: boolean | null, + parameterEnum?: ('Success' | 'Warning' | 'Error'), + parameterModel?: ModelThatExtends | ModelThatExtendsExtends | ModelWithString | null, }): Promise { const result = await __request({ @@ -4700,6 +4784,90 @@ export class DefaultsService { return result.body; } + /** + * @param parameterString This is a simple string that is optional with default value + * @param parameterNumber This is a simple number that is optional with default value + * @param parameterBoolean This is a simple boolean that is optional with default value + * @param parameterEnum This is a simple enum that is optional with default value + * @param parameterModel This is a simple model that is optional with default value + * @throws ApiError + */ + public static async callWithDefaultOptionalParameters({ + parameterString = 'Hello World!', + parameterNumber = 123, + parameterBoolean = true, + parameterEnum = 'Success', + parameterModel = { + \\"prop\\": \\"Hello World\\" + }, + }: { + parameterString?: string, + parameterNumber?: number, + parameterBoolean?: boolean, + parameterEnum?: ('Success' | 'Warning' | 'Error'), + parameterModel?: ModelThatExtends | ModelThatExtendsExtends | ModelWithString, + }): Promise { + + const result = await __request({ + method: 'post', + path: \`/api/v\${OpenAPI.VERSION}/defaults\`, + query: { + 'parameterString': parameterString, + 'parameterNumber': parameterNumber, + 'parameterBoolean': parameterBoolean, + 'parameterEnum': parameterEnum, + 'parameterModel': parameterModel, + }, + }); + + catchGenericError(result); + + return result.body; + } + + /** + * @param parameterStringWithNoDefault This is a string with no default + * @param parameterOptionalStringWithNoDefault This is a optional string with no default + * @param parameterStringWithDefault This is a string with default + * @param parameterStringWithEmptyDefault This is a string with empty default + * @param parameterOptionalStringWithDefault This is a optional string with default + * @param parameterOptionalStringWithEmptyDefault This is a optional string with empty default + * @throws ApiError + */ + public static async callToTestOrderOfParams({ + parameterStringWithNoDefault, + parameterOptionalStringWithNoDefault, + parameterStringWithDefault = 'hello', + parameterStringWithEmptyDefault = '', + parameterOptionalStringWithDefault = 'hello', + parameterOptionalStringWithEmptyDefault = '', + }: { + parameterStringWithNoDefault: string, + parameterOptionalStringWithNoDefault?: string, + parameterStringWithDefault?: string, + parameterStringWithEmptyDefault?: string, + parameterOptionalStringWithDefault?: string, + parameterOptionalStringWithEmptyDefault?: string, + }): Promise { + + const result = await __request({ + method: 'put', + path: \`/api/v\${OpenAPI.VERSION}/defaults\`, + query: { + 'parameterStringWithNoDefault': parameterStringWithNoDefault, + 'parameterOptionalStringWithNoDefault': parameterOptionalStringWithNoDefault, + 'parameterStringWithDefault': parameterStringWithDefault, + 'parameterStringWithEmptyDefault': parameterStringWithEmptyDefault, + 'parameterOptionalStringWithDefault': parameterOptionalStringWithDefault, + 'parameterOptionalStringWithEmptyDefault': parameterOptionalStringWithEmptyDefault, + }, + }); + + catchGenericError(result); + + return result.body; + } + }" `; @@ -5242,14 +5410,14 @@ import { OpenAPI } from '../core/OpenAPI'; export class TypesService { /** - * @param parameterNumber This is a number parameter - * @param parameterString This is a string parameter - * @param parameterBoolean This is a boolean parameter - * @param parameterObject This is an object parameter * @param parameterArray This is an array parameter * @param parameterDictionary This is a dictionary parameter * @param parameterEnum This is an enum parameter * @param id This is a number parameter + * @param parameterNumber This is a number parameter + * @param parameterString This is a string parameter + * @param parameterBoolean This is a boolean parameter + * @param parameterObject This is an object parameter * @result number Response is a simple number * @result string Response is a simple string * @result boolean Response is a simple boolean @@ -5257,36 +5425,36 @@ export class TypesService { * @throws ApiError */ public static async types({ - parameterNumber = 123, - parameterString = 'default', - parameterBoolean = true, - parameterObject = null, parameterArray, parameterDictionary, parameterEnum, id, + parameterNumber = 123, + parameterString = 'default', + parameterBoolean = true, + parameterObject = null, }: { - parameterNumber: number, - parameterString: string | null, - parameterBoolean: boolean | null, - parameterObject: any, parameterArray: Array | null, parameterDictionary: any, parameterEnum: ('Success' | 'Warning' | 'Error') | null, id?: number, + parameterNumber?: number, + parameterString?: string | null, + parameterBoolean?: boolean | null, + parameterObject?: any, }): Promise { const result = await __request({ method: 'get', path: \`/api/v\${OpenAPI.VERSION}/types\`, query: { + 'parameterArray': parameterArray, + 'parameterDictionary': parameterDictionary, + 'parameterEnum': parameterEnum, 'parameterNumber': parameterNumber, 'parameterString': parameterString, 'parameterBoolean': parameterBoolean, 'parameterObject': parameterObject, - 'parameterArray': parameterArray, - 'parameterDictionary': parameterDictionary, - 'parameterEnum': parameterEnum, }, }); diff --git a/test/mock/v2/spec.json b/test/mock/v2/spec.json index 6673810b..fac43da5 100644 --- a/test/mock/v2/spec.json +++ b/test/mock/v2/spec.json @@ -171,28 +171,86 @@ "operationId": "CallWithDefaultParameters", "parameters": [ { - "description": "This is a simple string", + "description": "This is a simple string with default value", + "name": "parameterString", + "in": "query", + "required": true, + "default": "Hello World!", + "type": "string" + }, + { + "description": "This is a simple number with default value", + "name": "parameterNumber", + "in": "query", + "required": true, + "default": 123, + "type": "number" + }, + { + "description": "This is a simple boolean with default value", + "name": "parameterBoolean", + "in": "query", + "required": true, + "default": true, + "type": "boolean" + }, + { + "description": "This is a simple enum with default value", + "name": "parameterEnum", + "in": "query", + "required": true, + "default": 0, + "schema": { + "enum": [ + "Success", + "Warning", + "Error" + ] + } + }, + { + "description": "This is a simple model with default value", + "name": "parameterModel", + "in": "query", + "required": true, + "default": { + "prop": "Hello World" + }, + "schema": { + "$ref": "#/definitions/ModelWithString" + } + } + ] + }, + "post": { + "tags": [ + "Defaults" + ], + "operationId": "CallWithDefaultOptionalParameters", + "parameters": [ + { + "description": "This is a simple string that is optional with default value", "name": "parameterString", "in": "query", "default": "Hello World!", "type": "string" }, { - "description": "This is a simple number", + "description": "This is a simple number that is optional with default value", "name": "parameterNumber", "in": "query", "default": 123, "type": "number" }, { - "description": "This is a simple boolean", + "description": "This is a simple boolean that is optional with default value", "name": "parameterBoolean", "in": "query", "default": true, "type": "boolean" }, { - "description": "This is a simple enum", + "description": "This is a simple enum that is optional with default value", "name": "parameterEnum", "in": "query", "default": 0, @@ -205,7 +263,7 @@ } }, { - "description": "This is a simple model", + "description": "This is a simple model that is optional with default value", "name": "parameterModel", "in": "query", "default": { @@ -216,6 +274,60 @@ } } ] + }, + "put": { + "tags": [ + "Defaults" + ], + "operationId": "CallToTestOrderOfParams", + "parameters": [ + { + "description": "This is a optional string with default", + "name": "parameterOptionalStringWithDefault", + "in": "query", + "required": false, + "default": "Hello World!", + "type": "string" + }, + { + "description": "This is a optional string with empty default", + "name": "parameterOptionalStringWithEmptyDefault", + "in": "query", + "required": false, + "default": "", + "type": "string" + }, + { + "description": "This is a optional string with no default", + "name": "parameterOptionalStringWithNoDefault", + "in": "query", + "required": false, + "type": "string" + }, + { + "description": "This is a string with default", + "name": "parameterStringWithDefault", + "in": "query", + "required": true, + "default": "hello", + "type": "string" + }, + { + "description": "This is a string with empty default", + "name": "parameterStringWithEmptyDefault", + "in": "query", + "required": true, + "default": "", + "type": "string" + }, + { + "description": "This is a string with no default", + "name": "parameterStringWithNoDefault", + "in": "query", + "required": true, + "type": "string" + } + ] } }, "/api/v{api-version}/duplicate": { diff --git a/test/mock/v3/spec.json b/test/mock/v3/spec.json index 3105e5cb..94ef2c18 100644 --- a/test/mock/v3/spec.json +++ b/test/mock/v3/spec.json @@ -296,7 +296,7 @@ "operationId": "CallWithDefaultParameters", "parameters": [ { - "description": "This is a simple string", + "description": "This is a simple string with default value", "name": "parameterString", "in": "query", "nullable": true, @@ -306,7 +306,7 @@ } }, { - "description": "This is a simple number", + "description": "This is a simple number with default value", "name": "parameterNumber", "in": "query", "nullable": true, @@ -316,7 +316,7 @@ } }, { - "description": "This is a simple boolean", + "description": "This is a simple boolean with default value", "name": "parameterBoolean", "in": "query", "nullable": true, @@ -326,7 +326,7 @@ } }, { - "description": "This is a simple enum", + "description": "This is a simple enum with default value", "name": "parameterEnum", "in": "query", "schema": { @@ -339,7 +339,7 @@ } }, { - "description": "This is a simple model", + "description": "This is a simple model with default value", "name": "parameterModel", "in": "query", "nullable": true, @@ -351,6 +351,136 @@ } } ] + }, + "post": { + "tags": [ + "Defaults" + ], + "operationId": "CallWithDefaultOptionalParameters", + "parameters": [ + { + "description": "This is a simple string that is optional with default value", + "name": "parameterString", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "Hello World!" + } + }, + { + "description": "This is a simple number that is optional with default value", + "name": "parameterNumber", + "in": "query", + "required": false, + "schema": { + "type": "number", + "default": 123 + } + }, + { + "description": "This is a simple boolean that is optional with default value", + "name": "parameterBoolean", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true + } + }, + { + "description": "This is a simple enum that is optional with default value", + "name": "parameterEnum", + "in": "query", + "required": false, + "schema": { + "enum": [ + "Success", + "Warning", + "Error" + ], + "default": 0 + } + }, + { + "description": "This is a simple model that is optional with default value", + "name": "parameterModel", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/ModelWithString", + "default": { + "prop": "Hello World" + } + } + } + ] + }, + "put": { + "tags": [ + "Defaults" + ], + "operationId": "CallToTestOrderOfParams", + "parameters": [ + { + "description": "This is a optional string with default", + "name": "parameterOptionalStringWithDefault", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "hello" + } + }, + { + "description": "This is a optional string with empty default", + "name": "parameterOptionalStringWithEmptyDefault", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "" + } + }, + { + "description": "This is a optional string with no default", + "name": "parameterOptionalStringWithNoDefault", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "This is a string with default", + "name": "parameterStringWithDefault", + "in": "query", + "required": true, + "schema": { + "type": "string", + "default": "hello" + } + }, + { + "description": "This is a string with empty default", + "name": "parameterStringWithEmptyDefault", + "in": "query", + "required": true, + "schema": { + "type": "string", + "default": "" + } + }, + { + "description": "This is a string with no default", + "name": "parameterStringWithNoDefault", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ] } }, "/api/v{api-version}/duplicate": {