@@ -4,28 +4,23 @@ import com.beust.klaxon.JsonObject
4
4
import com.beust.klaxon.Parser
5
5
import org.gradle.internal.impldep.org.apache.commons.lang.RandomStringUtils
6
6
import org.gradle.testkit.runner.BuildResult
7
- import org.gradle.testkit.runner.BuildTask
8
7
import org.gradle.testkit.runner.GradleRunner
9
8
import org.gradle.testkit.runner.TaskOutcome
10
- import org.junit.Assert.assertEquals
11
- import org.junit.Assert.assertFalse
12
- import org.junit.Before
13
- import org.junit.Rule
14
- import org.junit.Test
15
- import org.junit.rules.TemporaryFolder
9
+ import org.junit.jupiter.api.Assertions.assertEquals
10
+ import org.junit.jupiter.api.Assertions.assertFalse
11
+ import org.junit.jupiter.api.BeforeEach
12
+ import org.junit.jupiter.api.Test
16
13
import java.io.File
17
14
import java.io.FileReader
15
+ import java.nio.file.Files
18
16
19
17
class OpenApiGradlePluginTest {
20
- @Rule
21
- @JvmField
22
- var testProjectDir: TemporaryFolder = TemporaryFolder ()
23
18
24
- private lateinit var projectTestDir: File
25
- private lateinit var buildFile: File
26
- private lateinit var projectBuildDir: File
19
+ private val projectTestDir = Files .createTempDirectory( " acceptance-project " ).toFile()
20
+ private val buildFile = File (projectTestDir, " build.gradle " )
21
+ private val projectBuildDir = File (projectTestDir, " build " )
27
22
28
- private var baseBuildGradle = """ plugins {
23
+ private val baseBuildGradle = """ plugins {
29
24
id 'org.springframework.boot' version '2.2.0.RELEASE'
30
25
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
31
26
id 'java'
@@ -47,16 +42,9 @@ class OpenApiGradlePluginTest {
47
42
}
48
43
""" .trimIndent()
49
44
50
- @Before
51
- fun setup () {
52
- val acceptanceTestProject = File (this .javaClass.classLoader.getResource(" acceptance-project" )!! .path)
53
- projectTestDir = File (testProjectDir.newFolder(), " acceptence-project" )
54
-
55
- acceptanceTestProject.copyRecursively(projectTestDir)
56
- buildFile = File (projectTestDir, " build.gradle" )
57
-
58
- projectBuildDir = File (projectTestDir, " build" )
59
- println (" !!!!! $projectBuildDir !!!!!!!" )
45
+ @BeforeEach
46
+ fun createTemporaryAcceptanceProjectFromTemplate () {
47
+ File (javaClass.classLoader.getResource(" acceptance-project" )!! .path).copyRecursively(projectTestDir)
60
48
}
61
49
62
50
@Test
@@ -69,165 +57,173 @@ class OpenApiGradlePluginTest {
69
57
.withPluginClasspath()
70
58
.build()
71
59
72
- assertEquals(TaskOutcome .SUCCESS , getTaskByName (result, " generateOpenApiDocs " )? .outcome)
60
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask (result) .outcome)
73
61
74
62
val openApiJsonFile = File (projectBuildDir, DEFAULT_OPEN_API_FILE_NAME )
75
63
assertOpenApiJsonFileIsAsExpected(openApiJsonFile, 1 )
76
64
}
77
65
78
66
@Test
79
67
fun `different output dir` () {
80
- var specialOutputDir = File (projectTestDir, " specialDir" )
68
+ val specialOutputDir = File (projectTestDir, " specialDir" )
81
69
specialOutputDir.mkdirs()
82
70
83
- buildFile.writeText(""" $baseBuildGradle
71
+ buildFile.writeText(
72
+ """ $baseBuildGradle
84
73
openApi{
85
74
outputDir = file("${specialOutputDir.toURI().path} ")
86
75
}
87
- """ .trimMargin())
76
+ """ .trimMargin()
77
+ )
88
78
89
79
val result = GradleRunner .create()
90
80
.withProjectDir(projectTestDir)
91
81
.withArguments(" clean" , " generateOpenApiDocs" )
92
82
.withPluginClasspath()
93
83
.build()
94
84
95
- assertEquals(TaskOutcome .SUCCESS , getTaskByName (result, " generateOpenApiDocs " )? .outcome)
85
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask (result) .outcome)
96
86
97
87
val openApiJsonFile = File (specialOutputDir, DEFAULT_OPEN_API_FILE_NAME )
98
88
assertOpenApiJsonFileIsAsExpected(openApiJsonFile, 1 )
99
89
}
100
90
101
91
@Test
102
92
fun `different output file name` () {
103
- var specialOutputJsonFileName = RandomStringUtils .randomAlphanumeric(15 )
93
+ val specialOutputJsonFileName = RandomStringUtils .randomAlphanumeric(15 )
104
94
105
- buildFile.writeText(""" $baseBuildGradle
95
+ buildFile.writeText(
96
+ """ $baseBuildGradle
106
97
openApi{
107
98
outputFileName = "$specialOutputJsonFileName "
108
99
}
109
- """ .trimMargin())
100
+ """ .trimMargin()
101
+ )
110
102
111
103
val result = GradleRunner .create()
112
104
.withProjectDir(projectTestDir)
113
105
.withArguments(" clean" , " generateOpenApiDocs" )
114
106
.withPluginClasspath()
115
107
.build()
116
108
117
- assertEquals(TaskOutcome .SUCCESS , getTaskByName (result, " generateOpenApiDocs " )? .outcome)
109
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask (result) .outcome)
118
110
119
111
val openApiJsonFile = File (projectBuildDir, specialOutputJsonFileName)
120
112
assertOpenApiJsonFileIsAsExpected(openApiJsonFile, 1 )
121
113
}
122
114
123
115
@Test
124
116
fun `using forked properties` () {
125
- buildFile.writeText(""" $baseBuildGradle
117
+ buildFile.writeText(
118
+ """ $baseBuildGradle
126
119
openApi{
127
120
forkProperties = "-Dspring.profiles.active=multiple-endpoints -Dsome.second.property=someValue"
128
121
}
129
- """ .trimMargin())
122
+ """ .trimMargin()
123
+ )
130
124
131
125
val result = GradleRunner .create()
132
126
.withProjectDir(projectTestDir)
133
127
.withArguments(" clean" , " generateOpenApiDocs" )
134
128
.withPluginClasspath()
135
129
.build()
136
130
137
- assertEquals(TaskOutcome .SUCCESS , getTaskByName (result, " generateOpenApiDocs " )? .outcome)
131
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask (result) .outcome)
138
132
139
133
val openApiJsonFile = File (projectBuildDir, DEFAULT_OPEN_API_FILE_NAME )
140
134
assertOpenApiJsonFileIsAsExpected(openApiJsonFile, 3 )
141
135
}
142
136
143
137
@Test
144
138
fun `using forked properties via System properties` () {
145
- buildFile.writeText(""" $baseBuildGradle
139
+ buildFile.writeText(
140
+ """ $baseBuildGradle
146
141
openApi{
147
142
forkProperties = System.properties
148
143
}
149
- """ .trimMargin())
144
+ """ .trimMargin()
145
+ )
150
146
151
147
val result = GradleRunner .create()
152
148
.withProjectDir(projectTestDir)
153
149
.withArguments(" clean" , " generateOpenApiDocs" , " -Dspring.profiles.active=multiple-endpoints" )
154
150
.withPluginClasspath()
155
151
.build()
156
152
157
- assertEquals(TaskOutcome .SUCCESS , getTaskByName (result, " generateOpenApiDocs " )? .outcome)
153
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask (result) .outcome)
158
154
159
155
val openApiJsonFile = File (projectBuildDir, DEFAULT_OPEN_API_FILE_NAME )
160
156
assertOpenApiJsonFileIsAsExpected(openApiJsonFile, 2 )
161
157
}
162
158
163
159
@Test
164
160
fun `configurable wait time` () {
165
- buildFile.writeText(""" $baseBuildGradle
161
+ buildFile.writeText(
162
+ """ $baseBuildGradle
166
163
openApi{
167
164
forkProperties = "-Dspring.profiles.active=slower"
168
165
waitTimeInSeconds = 60
169
166
}
170
- """ .trimMargin())
167
+ """ .trimMargin()
168
+ )
171
169
172
170
val result = GradleRunner .create()
173
171
.withProjectDir(projectTestDir)
174
172
.withArguments(" clean" , " generateOpenApiDocs" )
175
173
.withPluginClasspath()
176
174
.build()
177
175
178
- assertEquals(TaskOutcome .SUCCESS , getTaskByName (result, " generateOpenApiDocs " )? .outcome)
176
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask (result) .outcome)
179
177
180
178
val openApiJsonFile = File (projectBuildDir, DEFAULT_OPEN_API_FILE_NAME )
181
179
assertOpenApiJsonFileIsAsExpected(openApiJsonFile, 1 )
182
180
}
183
181
184
182
@Test
185
183
fun `using different api url` () {
186
- buildFile.writeText(""" $baseBuildGradle
184
+ buildFile.writeText(
185
+ """ $baseBuildGradle
187
186
openApi{
188
187
apiDocsUrl = "http://localhost:8080/secret-api-docs"
189
188
forkProperties = "-Dspring.profiles.active=different-url"
190
189
}
191
- """ .trimMargin())
190
+ """ .trimMargin()
191
+ )
192
192
193
193
val result = GradleRunner .create()
194
194
.withProjectDir(projectTestDir)
195
195
.withArguments(" clean" , " generateOpenApiDocs" )
196
196
.withPluginClasspath()
197
197
.build()
198
198
199
- assertEquals(TaskOutcome .SUCCESS , getTaskByName(result, " generateOpenApiDocs" )?.outcome)
200
-
201
- val openApiJsonFile = File (projectBuildDir, DEFAULT_OPEN_API_FILE_NAME )
202
- assertOpenApiJsonFileIsAsExpected(openApiJsonFile, 1 )
199
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask(result).outcome)
200
+ assertOpenApiJsonFileIsAsExpected(File (projectBuildDir, DEFAULT_OPEN_API_FILE_NAME ), 1 )
203
201
}
204
202
205
203
@Test
206
204
fun `using multiple grouped apis` () {
207
205
val outputJsonFileNameGroupA = " openapi-groupA.json"
208
206
val outputJsonFileNameGroupB = " openapi-groupB.json"
209
207
210
- buildFile.writeText(""" $baseBuildGradle
208
+ buildFile.writeText(
209
+ """ $baseBuildGradle
211
210
openApi{
212
211
groupedApiMappings = ["http://localhost:8080/v3/api-docs/groupA": "$outputJsonFileNameGroupA ",
213
212
"http://localhost:8080/v3/api-docs/groupB": "$outputJsonFileNameGroupB "]
214
213
forkProperties = "-Dspring.profiles.active=multiple-grouped-apis"
215
214
}
216
- """ .trimMargin())
215
+ """ .trimMargin()
216
+ )
217
217
218
218
val result = GradleRunner .create()
219
219
.withProjectDir(projectTestDir)
220
220
.withArguments(" clean" , " generateOpenApiDocs" )
221
221
.withPluginClasspath()
222
222
.build()
223
223
224
- assertEquals(TaskOutcome .SUCCESS , getTaskByName(result, " generateOpenApiDocs" )?.outcome)
225
-
226
- val openApiJsonFileGroupA = File (projectBuildDir, outputJsonFileNameGroupA)
227
- assertOpenApiJsonFileIsAsExpected(openApiJsonFileGroupA, 1 )
228
-
229
- val openApiJsonFileGroupB = File (projectBuildDir, outputJsonFileNameGroupB)
230
- assertOpenApiJsonFileIsAsExpected(openApiJsonFileGroupB, 2 )
224
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask(result).outcome)
225
+ assertOpenApiJsonFileIsAsExpected(File (projectBuildDir, outputJsonFileNameGroupA), 1 )
226
+ assertOpenApiJsonFileIsAsExpected(File (projectBuildDir, outputJsonFileNameGroupB), 2 )
231
227
}
232
228
233
229
@Test
@@ -236,45 +232,37 @@ class OpenApiGradlePluginTest {
236
232
val outputJsonFileNameGroupA = " openapi-groupA.json"
237
233
val outputJsonFileNameGroupB = " openapi-groupB.json"
238
234
239
- buildFile.writeText(""" $baseBuildGradle
235
+ buildFile.writeText(
236
+ """ $baseBuildGradle
240
237
openApi{
241
238
apiDocsUrl = "http://localhost:8080/v3/api-docs/groupA"
242
239
outputFileName = "$outputJsonFileNameSingleGroupA "
243
240
groupedApiMappings = ["http://localhost:8080/v3/api-docs/groupA": "$outputJsonFileNameGroupA ",
244
241
"http://localhost:8080/v3/api-docs/groupB": "$outputJsonFileNameGroupB "]
245
242
forkProperties = "-Dspring.profiles.active=multiple-grouped-apis"
246
243
}
247
- """ .trimMargin())
244
+ """ .trimMargin()
245
+ )
248
246
249
247
val result = GradleRunner .create()
250
248
.withProjectDir(projectTestDir)
251
249
.withArguments(" clean" , " generateOpenApiDocs" )
252
250
.withPluginClasspath()
253
251
.build()
254
252
255
- assertEquals(TaskOutcome .SUCCESS , getTaskByName(result, " generateOpenApiDocs" )?.outcome)
256
-
257
- val openApiJsonFileSingleGroupA = File (projectBuildDir, outputJsonFileNameSingleGroupA)
258
- assertFalse(openApiJsonFileSingleGroupA.exists())
259
-
260
- val openApiJsonFileGroupA = File (projectBuildDir, outputJsonFileNameGroupA)
261
- assertOpenApiJsonFileIsAsExpected(openApiJsonFileGroupA, 1 )
262
-
263
- val openApiJsonFileGroupB = File (projectBuildDir, outputJsonFileNameGroupB)
264
- assertOpenApiJsonFileIsAsExpected(openApiJsonFileGroupB, 2 )
253
+ assertEquals(TaskOutcome .SUCCESS , openApiDocsTask(result).outcome)
254
+ assertFalse(File (projectBuildDir, outputJsonFileNameSingleGroupA).exists())
255
+ assertOpenApiJsonFileIsAsExpected(File (projectBuildDir, outputJsonFileNameGroupA), 1 )
256
+ assertOpenApiJsonFileIsAsExpected(File (projectBuildDir, outputJsonFileNameGroupB), 2 )
265
257
}
266
258
267
259
private fun assertOpenApiJsonFileIsAsExpected (openApiJsonFile : File , expectedNumberOfPaths : Int ) {
268
260
val openApiJson = getOpenApiJsonAtLocation(openApiJsonFile)
269
- assertEquals(" 3.0.1" , openApiJson!! .string(" openapi" ))
261
+ assertEquals(" 3.0.1" , openApiJson.string(" openapi" ))
270
262
assertEquals(expectedNumberOfPaths, openApiJson.obj(" paths" )!! .size)
271
263
}
272
264
273
- private fun getOpenApiJsonAtLocation (path : File ): JsonObject ? {
274
- return Parser .default().parse(FileReader (path)) as JsonObject
275
- }
265
+ private fun getOpenApiJsonAtLocation (path : File ) = Parser .default().parse(FileReader (path)) as JsonObject
276
266
277
- private fun getTaskByName (result : BuildResult , name : String ): BuildTask ? {
278
- return result.tasks.find { it.path.contains(name) }
279
- }
280
- }
267
+ private fun openApiDocsTask (result : BuildResult ) = result.tasks.find { it.path.contains(" generateOpenApiDocs" ) }!!
268
+ }
0 commit comments