Skip to content
This repository was archived by the owner on Mar 16, 2025. It is now read-only.

Commit 5c0a152

Browse files
authored
Merge pull request #26 from openapi-processor/unknown-formats
Unknown formats, resolves #21
2 parents 6898ae4 + 98c3913 commit 5c0a152

File tree

3 files changed

+75
-14
lines changed

3 files changed

+75
-14
lines changed

src/main/kotlin/io/openapiprocessor/core/converter/DataTypeConverter.kt

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ class DataTypeConverter(
213213
}
214214

215215
var typeFormat = schemaInfo.getType()
216-
if (schemaInfo.getFormat() != null) {
217-
typeFormat += "/" + schemaInfo.getFormat()
216+
if (isSupportedFormat(schemaInfo.getFormat())) {
217+
typeFormat += ":" + schemaInfo.getFormat()
218218
}
219219

220220
// todo factory method in SchemaInfo
@@ -231,29 +231,42 @@ class DataTypeConverter(
231231

232232
return when(typeFormat) {
233233
"integer",
234-
"integer/int32" ->
234+
"integer:int32" ->
235235
IntegerDataType(constraints, schemaInfo.getDeprecated())
236-
"integer/int64" ->
236+
"integer:int64" ->
237237
LongDataType(constraints, schemaInfo.getDeprecated())
238238
"number",
239-
"number/float" ->
239+
"number:float" ->
240240
FloatDataType(constraints, schemaInfo.getDeprecated())
241-
"number/double" ->
241+
"number:double" ->
242242
DoubleDataType(constraints, schemaInfo.getDeprecated())
243243
"boolean" ->
244244
BooleanDataType(constraints, schemaInfo.getDeprecated())
245245
"string" ->
246246
createStringDataType(schemaInfo, constraints, dataTypes)
247-
"string/date" ->
247+
"string:date" ->
248248
LocalDateDataType(constraints, schemaInfo.getDeprecated())
249-
"string/date-time" ->
249+
"string:date-time" ->
250250
OffsetDateTimeDataType (constraints, schemaInfo.getDeprecated())
251251
else ->
252252
throw UnknownDataTypeException(schemaInfo.getName(), schemaInfo.getType(),
253253
schemaInfo.getFormat())
254254
}
255255
}
256256

257+
private fun isSupportedFormat(format: String?): Boolean {
258+
if(format == null)
259+
return false
260+
261+
return format in listOf(
262+
"int32",
263+
"int64",
264+
"float",
265+
"double",
266+
"date",
267+
"date-time")
268+
}
269+
257270
private fun createStringDataType(info: SchemaInfo, constraints: DataTypeConstraints, dataTypes: DataTypes): DataType {
258271
if (!info.isEnum()) {
259272
return StringDataType(constraints, info.getDeprecated())

src/main/kotlin/io/openapiprocessor/core/parser/swagger/Parser.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
package io.openapiprocessor.core.parser.swagger
1818

1919
import io.openapiprocessor.core.misc.toURL
20-
import io.openapiprocessor.core.parser.OpenApi as ParserOpenApi
2120
import io.swagger.v3.parser.OpenAPIV3Parser
2221
import io.swagger.v3.parser.core.models.ParseOptions
2322
import io.swagger.v3.parser.core.models.SwaggerParseResult
23+
import io.openapiprocessor.core.parser.OpenApi as ParserOpenApi
2424

2525
const val SCHEME_RESOURCE = "resource:"
2626

@@ -35,10 +35,10 @@ open class Parser {
3535
val opts = ParseOptions()
3636
// loads $refs to other files into #/components/schema and replaces the $refs to the
3737
// external files with $refs to #/components/schema.
38-
opts.setResolve(true)
38+
opts.isResolve = true
3939

4040
val result: SwaggerParseResult = OpenAPIV3Parser()
41-
.readLocation (preparePath (apiPath), null, opts)
41+
.readLocation(preparePath(apiPath), null, opts)
4242

4343
return OpenApi(result)
4444
}
@@ -49,16 +49,16 @@ open class Parser {
4949
// If it is something different (or nothing) it tries to find the given path as-is on the
5050
// file system. If that fails it tries to load the path as resource.
5151

52-
if (isResource (path)) {
52+
if (isResource(path)) {
5353
// strip resource: (only used by tests) to load test files from the resources
54-
return path.substring (SCHEME_RESOURCE.length)
54+
return path.substring(SCHEME_RESOURCE.length)
5555
}
5656

5757
return toURL(path).toString ()
5858
}
5959

6060
private fun isResource(path: String): Boolean {
61-
return path.startsWith (SCHEME_RESOURCE)
61+
return path.startsWith(SCHEME_RESOURCE)
6262
}
6363

6464
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright © 2020 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.converter
7+
8+
import io.kotest.core.spec.IsolationMode
9+
import io.kotest.core.spec.style.StringSpec
10+
import io.kotest.data.forAll
11+
import io.kotest.data.row
12+
import io.kotest.matchers.shouldBe
13+
import io.mockk.every
14+
import io.mockk.mockk
15+
import io.openapiprocessor.core.converter.mapping.MappingFinder
16+
import io.openapiprocessor.core.model.DataTypes
17+
import io.openapiprocessor.core.parser.RefResolver
18+
import io.openapiprocessor.core.parser.Schema
19+
20+
class DataTypeConverterPrimitiveSpec: StringSpec({
21+
isolationMode = IsolationMode.InstancePerTest
22+
23+
val converter = DataTypeConverter(ApiOptions(), MappingFinder())
24+
val resolver = mockk<RefResolver>()
25+
26+
"ignores unknown primitive data type format" {
27+
forAll(
28+
row("string","unknown", "String"),
29+
row("integer","unknown", "Integer"),
30+
row("number","unknown", "Float"),
31+
row("boolean","unknown", "Boolean")
32+
) { type, format, dataTypeName ->
33+
val schema = mockk<Schema>(relaxed = true)
34+
every { schema.getRef() } returns null
35+
every { schema.getType() } returns type
36+
every { schema.getFormat() } returns format
37+
38+
// when:
39+
val info = SchemaInfo("", "foo", schema = schema, resolver = resolver)
40+
val datatype = converter.convert(info, DataTypes())
41+
42+
// then:
43+
datatype.getName() shouldBe dataTypeName
44+
}
45+
46+
}
47+
48+
})

0 commit comments

Comments
 (0)