fix: complex generic breaks introspection (#294)
This commit is contained in:
@ -14,6 +14,7 @@ import io.bkbn.kompendium.core.util.TestModules.singleException
|
|||||||
import io.bkbn.kompendium.core.util.TestModules.genericException
|
import io.bkbn.kompendium.core.util.TestModules.genericException
|
||||||
import io.bkbn.kompendium.core.util.TestModules.genericPolymorphicResponse
|
import io.bkbn.kompendium.core.util.TestModules.genericPolymorphicResponse
|
||||||
import io.bkbn.kompendium.core.util.TestModules.genericPolymorphicResponseMultipleImpls
|
import io.bkbn.kompendium.core.util.TestModules.genericPolymorphicResponseMultipleImpls
|
||||||
|
import io.bkbn.kompendium.core.util.TestModules.gnarlyGenericResponse
|
||||||
import io.bkbn.kompendium.core.util.TestModules.headerParameter
|
import io.bkbn.kompendium.core.util.TestModules.headerParameter
|
||||||
import io.bkbn.kompendium.core.util.TestModules.multipleExceptions
|
import io.bkbn.kompendium.core.util.TestModules.multipleExceptions
|
||||||
import io.bkbn.kompendium.core.util.TestModules.nestedGenericCollection
|
import io.bkbn.kompendium.core.util.TestModules.nestedGenericCollection
|
||||||
@ -167,6 +168,9 @@ class KompendiumTest : DescribeSpec({
|
|||||||
it("Can support nested generics with multiple type parameters") {
|
it("Can support nested generics with multiple type parameters") {
|
||||||
openApiTestAllSerializers("T0040__nested_generic_multiple_type_params.json") { nestedGenericMultipleParamsCollection() }
|
openApiTestAllSerializers("T0040__nested_generic_multiple_type_params.json") { nestedGenericMultipleParamsCollection() }
|
||||||
}
|
}
|
||||||
|
it("Can handle a really gnarly generic example") {
|
||||||
|
openApiTestAllSerializers("T0043__gnarly_generic_example.json") { gnarlyGenericResponse() }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
describe("Miscellaneous") {
|
describe("Miscellaneous") {
|
||||||
xit("Can generate the necessary ReDoc home page") {
|
xit("Can generate the necessary ReDoc home page") {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package io.bkbn.kompendium.core.util
|
package io.bkbn.kompendium.core.util
|
||||||
|
|
||||||
|
import io.bkbn.kompendium.core.fixtures.Barzo
|
||||||
import io.bkbn.kompendium.core.fixtures.ColumnSchema
|
import io.bkbn.kompendium.core.fixtures.ColumnSchema
|
||||||
import io.bkbn.kompendium.core.fixtures.ComplexRequest
|
import io.bkbn.kompendium.core.fixtures.ComplexRequest
|
||||||
import io.bkbn.kompendium.core.fixtures.DateTimeString
|
import io.bkbn.kompendium.core.fixtures.DateTimeString
|
||||||
@ -7,6 +8,7 @@ import io.bkbn.kompendium.core.fixtures.DefaultField
|
|||||||
import io.bkbn.kompendium.core.fixtures.ExceptionResponse
|
import io.bkbn.kompendium.core.fixtures.ExceptionResponse
|
||||||
import io.bkbn.kompendium.core.fixtures.Flibbity
|
import io.bkbn.kompendium.core.fixtures.Flibbity
|
||||||
import io.bkbn.kompendium.core.fixtures.FlibbityGibbit
|
import io.bkbn.kompendium.core.fixtures.FlibbityGibbit
|
||||||
|
import io.bkbn.kompendium.core.fixtures.Foosy
|
||||||
import io.bkbn.kompendium.core.fixtures.Gibbity
|
import io.bkbn.kompendium.core.fixtures.Gibbity
|
||||||
import io.bkbn.kompendium.core.fixtures.ManyThings
|
import io.bkbn.kompendium.core.fixtures.ManyThings
|
||||||
import io.bkbn.kompendium.core.fixtures.MultiNestedGenerics
|
import io.bkbn.kompendium.core.fixtures.MultiNestedGenerics
|
||||||
@ -564,6 +566,8 @@ object TestModules {
|
|||||||
|
|
||||||
fun Routing.simpleGenericResponse() = basicGetGenerator<Gibbity<String>>()
|
fun Routing.simpleGenericResponse() = basicGetGenerator<Gibbity<String>>()
|
||||||
|
|
||||||
|
fun Routing.gnarlyGenericResponse() = basicGetGenerator<Foosy<Barzo<Int>, String>>()
|
||||||
|
|
||||||
fun Routing.nestedGenericResponse() = basicGetGenerator<Gibbity<Map<String, String>>>()
|
fun Routing.nestedGenericResponse() = basicGetGenerator<Gibbity<Map<String, String>>>()
|
||||||
|
|
||||||
fun Routing.genericPolymorphicResponse() = basicGetGenerator<Flibbity<Double>>()
|
fun Routing.genericPolymorphicResponse() = basicGetGenerator<Flibbity<Double>>()
|
||||||
|
91
core/src/test/resources/T0043__gnarly_generic_example.json
Normal file
91
core/src/test/resources/T0043__gnarly_generic_example.json
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
"openapi": "3.1.0",
|
||||||
|
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"info": {
|
||||||
|
"title": "Test API",
|
||||||
|
"version": "1.33.7",
|
||||||
|
"description": "An amazing, fully-ish 😉 generated API spec",
|
||||||
|
"termsOfService": "https://example.com",
|
||||||
|
"contact": {
|
||||||
|
"name": "Homer Simpson",
|
||||||
|
"url": "https://gph.is/1NPUDiM",
|
||||||
|
"email": "chunkylover53@aol.com"
|
||||||
|
},
|
||||||
|
"license": {
|
||||||
|
"name": "MIT",
|
||||||
|
"url": "https://github.com/bkbnio/kompendium/blob/main/LICENSE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"servers": [
|
||||||
|
{
|
||||||
|
"url": "https://myawesomeapi.com",
|
||||||
|
"description": "Production instance of my API"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://staging.myawesomeapi.com",
|
||||||
|
"description": "Where the fun stuff happens"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"paths": {
|
||||||
|
"/": {
|
||||||
|
"get": {
|
||||||
|
"tags": [],
|
||||||
|
"summary": "Great Summary!",
|
||||||
|
"description": "testing more",
|
||||||
|
"parameters": [],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "A Successful Endeavor",
|
||||||
|
"content": {
|
||||||
|
"application/json": {
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/components/schemas/Foosy-Barzo-String"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deprecated": false
|
||||||
|
},
|
||||||
|
"parameters": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"webhooks": {},
|
||||||
|
"components": {
|
||||||
|
"schemas": {
|
||||||
|
"Foosy-Barzo-String": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"otherThing": {
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"$ref": "#/components/schemas/Barzo-Int"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"otherThing",
|
||||||
|
"test"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Barzo-Int": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"result": {
|
||||||
|
"type": "number",
|
||||||
|
"format": "int32"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"result"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"securitySchemes": {}
|
||||||
|
},
|
||||||
|
"security": [],
|
||||||
|
"tags": []
|
||||||
|
}
|
@ -138,3 +138,6 @@ data class ManyThings(
|
|||||||
val someA: Something,
|
val someA: Something,
|
||||||
val someB: Something?
|
val someB: Something?
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class Foosy<T, K>(val test: T, val otherThing: List<K>)
|
||||||
|
data class Barzo<G>(val result: G)
|
||||||
|
@ -96,7 +96,7 @@ object SimpleObjectHandler {
|
|||||||
return SchemaGenerator.fromTypeToSchema(type, cache).let {
|
return SchemaGenerator.fromTypeToSchema(type, cache).let {
|
||||||
if (it.isOrContainsObjectDef()) {
|
if (it.isOrContainsObjectDef()) {
|
||||||
cache[type.getSimpleSlug()] = it
|
cache[type.getSimpleSlug()] = it
|
||||||
ReferenceDefinition(prop.returnType.getReferenceSlug())
|
ReferenceDefinition(type.getReferenceSlug())
|
||||||
} else {
|
} else {
|
||||||
it
|
it
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user