Skip to content

Commit 610b0e1

Browse files
authored
Merge pull request #77 from benfonty/bfonty/fix-yaml-group-generation
fix: #76 yaml group export
2 parents 4b39fe9 + 4fd5f32 commit 610b0e1

File tree

3 files changed

+64
-3
lines changed

3 files changed

+64
-3
lines changed

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ dependencies {
5656
testImplementation(platform("org.junit:junit-bom:5.7.1"))
5757
testImplementation("org.junit.jupiter:junit-jupiter")
5858
testImplementation("com.beust:klaxon:5.5")
59+
testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.2")
60+
testImplementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.13.2")
5961

6062
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.16.0")
6163
}

src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGeneratorTask.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ open class OpenApiGeneratorTask : DefaultTask() {
7474
logger.info("Generating OpenApi Docs..")
7575
val response: Response = khttp.get(url)
7676

77-
val isYaml = url.toLowerCase().matches(Regex(".+[./]yaml$"))
77+
val isYaml = url.toLowerCase().matches(Regex(".+[./]yaml(/.+)*"))
7878
val apiDocs = if (isYaml) response.text else prettifyJson(response)
7979

8080
val outputFile = outputDir.file(fileName).get().asFile

src/test/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePluginTest.kt

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ package org.springdoc.openapi.gradle.plugin
22

33
import com.beust.klaxon.JsonObject
44
import com.beust.klaxon.Parser
5+
import com.fasterxml.jackson.databind.ObjectMapper
6+
import com.fasterxml.jackson.databind.node.TextNode
7+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
8+
import com.fasterxml.jackson.module.kotlin.KotlinModule
59
import org.gradle.internal.impldep.org.apache.commons.lang.RandomStringUtils
610
import org.gradle.testkit.runner.BuildResult
711
import org.gradle.testkit.runner.GradleRunner
@@ -20,6 +24,9 @@ class OpenApiGradlePluginTest {
2024
private val buildFile = File(projectTestDir, "build.gradle")
2125
private val projectBuildDir = File(projectTestDir, "build")
2226

27+
private val pathsField = "paths"
28+
private val openapiField = "openapi"
29+
2330
private val baseBuildGradle = """plugins {
2431
id 'java'
2532
id 'org.springframework.boot' version '2.4.5'
@@ -149,6 +156,24 @@ class OpenApiGradlePluginTest {
149156
assertOpenApiJsonFile(1)
150157
}
151158

159+
@Test
160+
fun `yaml generation`() {
161+
val outputYamlFileName = "openapi.yaml"
162+
163+
buildFile.writeText(
164+
"""$baseBuildGradle
165+
166+
openApi{
167+
apiDocsUrl = "http://localhost:8080/v3/api-docs.yaml"
168+
outputFileName = "$outputYamlFileName"
169+
}
170+
""".trimMargin()
171+
)
172+
173+
assertEquals(TaskOutcome.SUCCESS, openApiDocsTask(runTheBuild()).outcome)
174+
assertOpenApiYamlFile(1, outputYamlFileName)
175+
}
176+
152177
@Test
153178
fun `using multiple grouped apis`() {
154179
val outputJsonFileNameGroupA = "openapi-groupA.json"
@@ -171,6 +196,28 @@ class OpenApiGradlePluginTest {
171196
assertOpenApiJsonFile(2, outputJsonFileNameGroupB)
172197
}
173198

199+
@Test
200+
fun `using multiple grouped apis with yaml`() {
201+
val outputYamlFileNameGroupA = "openapi-groupA.yaml"
202+
val outputYamlFileNameGroupB = "openapi-groupB.yaml"
203+
204+
buildFile.writeText(
205+
"""$baseBuildGradle
206+
bootRun {
207+
args = ["--spring.profiles.active=multiple-grouped-apis"]
208+
}
209+
openApi{
210+
groupedApiMappings = ["http://localhost:8080/v3/api-docs.yaml/groupA": "$outputYamlFileNameGroupA",
211+
"http://localhost:8080/v3/api-docs.yaml/groupB": "$outputYamlFileNameGroupB"]
212+
}
213+
""".trimMargin()
214+
)
215+
216+
assertEquals(TaskOutcome.SUCCESS, openApiDocsTask(runTheBuild()).outcome)
217+
assertOpenApiYamlFile(1, outputYamlFileNameGroupA)
218+
assertOpenApiYamlFile(2, outputYamlFileNameGroupB)
219+
}
220+
174221
@Test
175222
fun `using multiple grouped apis should ignore single api properties`() {
176223
val outputJsonFileNameSingleGroupA = "openapi-single-groupA.json"
@@ -209,11 +256,23 @@ class OpenApiGradlePluginTest {
209256
buildDir: File = projectBuildDir
210257
) {
211258
val openApiJson = getOpenApiJsonAtLocation(File(buildDir, outputJsonFileName))
212-
assertEquals("3.0.1", openApiJson.string("openapi"))
213-
assertEquals(expectedPathCount, openApiJson.obj("paths")!!.size)
259+
assertEquals("3.0.1", openApiJson.string(openapiField))
260+
assertEquals(expectedPathCount, openApiJson.obj(pathsField)!!.size)
214261
}
215262

216263
private fun getOpenApiJsonAtLocation(path: File) = Parser.default().parse(FileReader(path)) as JsonObject
217264

265+
private fun assertOpenApiYamlFile(
266+
expectedPathCount: Int,
267+
outputJsonFileName: String = DEFAULT_OPEN_API_FILE_NAME,
268+
buildDir: File = projectBuildDir
269+
) {
270+
val mapper = ObjectMapper(YAMLFactory())
271+
mapper.registerModule(KotlinModule.Builder().build())
272+
val node = mapper.readTree(File(buildDir, outputJsonFileName))
273+
assertEquals("3.0.1", node.get(openapiField).asText())
274+
assertEquals(expectedPathCount, node.get(pathsField)!!.size())
275+
}
276+
218277
private fun openApiDocsTask(result: BuildResult) = result.tasks.find { it.path.contains("generateOpenApiDocs") }!!
219278
}

0 commit comments

Comments
 (0)