@@ -22,8 +22,8 @@ import io.swagger.models.Response
2222import io.swagger.models.Swagger
2323import io.swagger.models.auth.BasicAuthDefinition
2424import io.swagger.models.auth.OAuth2Definition
25+ import io.swagger.models.parameters.AbstractSerializableParameter
2526import io.swagger.models.parameters.BodyParameter
26- import io.swagger.models.parameters.Parameter
2727import io.swagger.models.parameters.PathParameter
2828import io.swagger.models.properties.StringProperty
2929import io.swagger.parser.Swagger20Parser
@@ -252,6 +252,16 @@ class OpenApi20GeneratorTest {
252252 thenValidateOpenApi(openapi)
253253 }
254254
255+ @Test
256+ fun `should include default values` () {
257+ val api = givenResourcesWithRequestParametersWithDefaultValues()
258+
259+ val openapi = whenOpenApiObjectGenerated(api)
260+
261+ thenGetProductWith200ResponseIsGeneratedWithDefaultValue(openapi, api)
262+ thenValidateOpenApi(openapi)
263+ }
264+
255265 private fun whenExtractOrFindSchema (schemaNameAndSchemaMap : MutableMap <Model , String >, ordersSchema : Model , shopsSchema : Model ) {
256266 OpenApi20Generator .extractOrFindSchema(schemaNameAndSchemaMap, ordersSchema, OpenApi20Generator .generateSchemaName(" /orders" ))
257267 OpenApi20Generator .extractOrFindSchema(schemaNameAndSchemaMap, shopsSchema, OpenApi20Generator .generateSchemaName(" /shops" ))
@@ -356,7 +366,13 @@ class OpenApi20GeneratorTest {
356366 successfulGetResponse
357367 .examples.get(successfulGetProductModel.response.contentType)
358368 ).isEqualTo(successfulGetProductModel.response.example)
359- thenParametersForGetMatch(productPath.get.parameters, successfulGetProductModel.request)
369+ thenParametersForGetMatch(productPath.get.parameters as List <AbstractSerializableParameter <* >>, successfulGetProductModel.request)
370+ }
371+
372+ private fun thenGetProductWith200ResponseIsGeneratedWithDefaultValue (openapi : Swagger , api : List <ResourceModel >) {
373+ val successfulGetProductModel = api[0 ]
374+ val productPath = openapi.paths.getValue(successfulGetProductModel.request.path)
375+ thenParametersForGetMatchWithDefaultValue(productPath.get.parameters as List <AbstractSerializableParameter <* >>, successfulGetProductModel.request)
360376 }
361377
362378 private fun thenPostProductWith200ResponseIsGenerated (openapi : Swagger , api : List <ResourceModel >) {
@@ -371,7 +387,7 @@ class OpenApi20GeneratorTest {
371387 successfulPostResponse!!
372388 .examples.get(successfulPostProductModel.response.contentType)
373389 ).isEqualTo(successfulPostProductModel.response.example)
374- thenParametersForPostMatch(productPath.post.parameters, successfulPostProductModel.request)
390+ thenParametersForPostMatch(productPath.post.parameters as List < AbstractSerializableParameter < * >> , successfulPostProductModel.request)
375391
376392 thenRequestAndResponseSchemataAreReferenced(productPath, successfulPostResponse, openapi.definitions)
377393 }
@@ -392,14 +408,14 @@ class OpenApi20GeneratorTest {
392408 val productResourceModel = api[0 ]
393409 val productPath = openapi.paths.getValue(productResourceModel.request.path)
394410
395- thenParameterMatches(productPath.post.parameters, " formData" , productResourceModel.request.requestParameters[0 ])
411+ thenParameterMatches(productPath.post.parameters as List < AbstractSerializableParameter < * >> , " formData" , productResourceModel.request.requestParameters[0 ])
396412 }
397413
398414 private fun thenPutRequestShouldHaveFormDataParameters (openapi : Swagger , api : List <ResourceModel >) {
399415 val productResourceModel = api[0 ]
400416 val productPath = openapi.paths.getValue(productResourceModel.request.path)
401417
402- thenParameterMatches(productPath.put.parameters, " formData" , productResourceModel.request.requestParameters[0 ])
418+ thenParameterMatches(productPath.put.parameters as List < AbstractSerializableParameter < * >> , " formData" , productResourceModel.request.requestParameters[0 ])
403419 }
404420
405421 private fun thenGetProductWith400ResponseIsGenerated (openapi : Swagger , api : List <ResourceModel >) {
@@ -410,26 +426,36 @@ class OpenApi20GeneratorTest {
410426 productPath.get.responses.get(badGetProductModel.response.status.toString())!!
411427 .examples.get(badGetProductModel.response.contentType)
412428 ).isEqualTo(badGetProductModel.response.example)
413- thenParametersForGetMatch(productPath.get.parameters, badGetProductModel.request)
429+ thenParametersForGetMatch(productPath.get.parameters as List <AbstractSerializableParameter <* >>, badGetProductModel.request)
430+ }
431+
432+ private fun thenParametersForGetMatch (parameters : List <AbstractSerializableParameter <* >>, request : RequestModel ) {
433+ thenParameterMatches(parameters, " path" , request.pathParameters[0 ])
434+ thenParameterMatches(parameters, " query" , request.requestParameters[0 ])
435+ thenParameterMatches(parameters, " header" , request.headers[0 ])
414436 }
415437
416- private fun thenParametersForGetMatch (parameters : List <Parameter >, request : RequestModel ) {
438+ private fun thenParametersForGetMatchWithDefaultValue (parameters : List <AbstractSerializableParameter < * > >, request : RequestModel ) {
417439 thenParameterMatches(parameters, " path" , request.pathParameters[0 ])
418440 thenParameterMatches(parameters, " query" , request.requestParameters[0 ])
441+ thenParameterMatches(parameters, " query" , request.requestParameters[1 ])
442+ thenParameterMatches(parameters, " query" , request.requestParameters[2 ])
443+ thenParameterMatches(parameters, " query" , request.requestParameters[3 ])
419444 thenParameterMatches(parameters, " header" , request.headers[0 ])
420445 }
421446
422- private fun thenParametersForPostMatch (parameters : List <Parameter >, request : RequestModel ) {
447+ private fun thenParametersForPostMatch (parameters : List <AbstractSerializableParameter < * > >, request : RequestModel ) {
423448 thenParameterMatches(parameters, " header" , request.headers[0 ])
424449 }
425450
426- private fun thenParameterMatches (parameters : List <Parameter >, type : String , parameterDescriptor : AbstractParameterDescriptor ) {
451+ private fun thenParameterMatches (parameters : List <AbstractSerializableParameter < * > >, type : String , parameterDescriptor : AbstractParameterDescriptor ) {
427452 val parameter = findParameterByTypeAndName(parameters, type, parameterDescriptor.name)
428453 then(parameter).isNotNull
429454 then(parameter!! .description).isEqualTo(parameterDescriptor.description)
455+ then(parameter!! .default).isEqualTo(parameterDescriptor.default)
430456 }
431457
432- private fun findParameterByTypeAndName (parameters : List <Parameter > , type : String , name : String ): Parameter ? {
458+ private fun findParameterByTypeAndName (parameters : List <AbstractSerializableParameter < * >> , type : String , name : String ): AbstractSerializableParameter < * > ? {
433459 return parameters.firstOrNull { it.`in ` == type && it.name == name }
434460 }
435461
@@ -518,6 +544,21 @@ class OpenApi20GeneratorTest {
518544 )
519545 }
520546
547+ private fun givenResourcesWithRequestParametersWithDefaultValues (): List <ResourceModel > {
548+ return listOf (
549+ ResourceModel (
550+ operationId = " test" ,
551+ summary = " summary" ,
552+ description = " description" ,
553+ privateResource = false ,
554+ deprecated = false ,
555+ tags = setOf (" tag1" , " tag2" ),
556+ request = getProductRequestWithRequestParametersWithDefaultValue(),
557+ response = getProduct200Response(getProductPayloadExample())
558+ )
559+ )
560+ }
561+
521562 private fun givenPostProductResourceModelWithoutFieldDescriptors (): List <ResourceModel > {
522563 return listOf (
523564 ResourceModel (
@@ -888,6 +929,45 @@ class OpenApi20GeneratorTest {
888929 )
889930 }
890931
932+ private fun getProductRequestWithRequestParametersWithDefaultValue (): RequestModel {
933+ return getProductRequest().copy(
934+ requestParameters = listOf (
935+ ParameterDescriptor (
936+ name = " booleanParameter" ,
937+ description = " a boolean parameter" ,
938+ type = " BOOLEAN" ,
939+ optional = true ,
940+ ignored = false ,
941+ default = true
942+ ),
943+ ParameterDescriptor (
944+ name = " stringParameter" ,
945+ description = " a string parameter" ,
946+ type = " STRING" ,
947+ optional = true ,
948+ ignored = false ,
949+ default = " a default value"
950+ ),
951+ ParameterDescriptor (
952+ name = " numberParameter" ,
953+ description = " a number parameter" ,
954+ type = " NUMBER" ,
955+ optional = true ,
956+ ignored = false ,
957+ default = 1.0
958+ ),
959+ ParameterDescriptor (
960+ name = " integerParameter" ,
961+ description = " a integer parameter" ,
962+ type = " INTEGER" ,
963+ optional = true ,
964+ ignored = false ,
965+ default = 2L
966+ )
967+ )
968+ )
969+ }
970+
891971 private fun productRequest (schema : Schema ? = null, path : String = "/products", method : HTTPMethod = HTTPMethod .POST ): RequestModel {
892972 return RequestModel (
893973 path = path,
0 commit comments