Skip to content
This repository was archived by the owner on Dec 15, 2024. It is now read-only.

Commit d604efe

Browse files
committed
Added new modules; added deprecated key
1 parent 27409da commit d604efe

File tree

21 files changed

+112
-25
lines changed

21 files changed

+112
-25
lines changed

build.gradle.kts

-14
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
33

44
plugins {
5-
id("kotest-publishing-conventions")
65
kotlin("jvm") version "1.6.21"
76
}
87

@@ -17,19 +16,6 @@ repositories {
1716
}
1817
}
1918

20-
dependencies {
21-
implementation("io.ktor:ktor-server-core:2.2.4")
22-
implementation("io.ktor:ktor-server-auth:2.2.4")
23-
implementation("io.swagger.parser.v3:swagger-parser:2.1.12")
24-
implementation("io.kotest:kotest-framework-api:5.5.4")
25-
testImplementation("io.ktor:ktor-client-apache:2.2.4")
26-
testImplementation("io.kotest:kotest-runner-junit5:5.5.4")
27-
testImplementation("io.kotest:kotest-assertions-core:5.5.4")
28-
testImplementation("io.ktor:ktor-server-test-host:2.2.4")
29-
testImplementation("io.ktor:ktor-serialization-jackson:2.2.3")
30-
testImplementation("io.ktor:ktor-server-content-negotiation:2.2.3")
31-
}
32-
3319
tasks.test {
3420
useJUnitPlatform()
3521
testLogging {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2+
3+
plugins {
4+
id("kotest-publishing-conventions")
5+
kotlin("jvm") version "1.6.21"
6+
}
7+
8+
group = "io.kotest.extensions"
9+
version = Ci.version
10+
11+
repositories {
12+
mavenLocal()
13+
mavenCentral()
14+
maven {
15+
url = uri("https://oss.sonatype.org/content/repositories/snapshots")
16+
}
17+
}
18+
19+
dependencies {
20+
api("io.ktor:ktor-server-core:2.2.4")
21+
}
22+
23+
tasks.withType<KotlinCompile> {
24+
kotlinOptions.jvmTarget = "11"
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.kotest.extensions.ktor.openapi
2+
3+
import io.ktor.server.application.ApplicationCall
4+
import io.ktor.server.application.call
5+
import io.ktor.util.AttributeKey
6+
import io.ktor.util.pipeline.PipelineContext
7+
8+
val DescriptionKey: AttributeKey<String> = AttributeKey("KotestOpenApiDescriptionKey")
9+
val DeprecatedKey: AttributeKey<Boolean> = AttributeKey("KotestOpenApiDeprecatedKey")
10+
11+
fun PipelineContext<*, ApplicationCall>.description(desc: String) {
12+
call.attributes.put(DescriptionKey, desc)
13+
}
14+
15+
fun PipelineContext<*, ApplicationCall>.deprecated(deprecated: Boolean) {
16+
if (deprecated) call.attributes.put(DeprecatedKey, deprecated)
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
2+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
3+
4+
plugins {
5+
id("kotest-publishing-conventions")
6+
kotlin("jvm") version "1.6.21"
7+
}
8+
9+
group = "io.kotest.extensions"
10+
version = Ci.version
11+
12+
repositories {
13+
mavenLocal()
14+
mavenCentral()
15+
maven {
16+
url = uri("https://oss.sonatype.org/content/repositories/snapshots")
17+
}
18+
}
19+
20+
dependencies {
21+
api(projects.kotestExtensionsKtorOpenapiModel)
22+
implementation("io.ktor:ktor-server-core:2.2.4")
23+
implementation("io.ktor:ktor-server-auth:2.2.4")
24+
implementation("io.swagger.parser.v3:swagger-parser:2.1.12")
25+
implementation("io.kotest:kotest-framework-api:5.5.4")
26+
testImplementation("io.ktor:ktor-client-apache:2.2.4")
27+
testImplementation("io.kotest:kotest-runner-junit5:5.5.4")
28+
testImplementation("io.kotest:kotest-assertions-core:5.5.4")
29+
testImplementation("io.ktor:ktor-server-test-host:2.2.4")
30+
testImplementation("io.ktor:ktor-serialization-jackson:2.2.3")
31+
testImplementation("io.ktor:ktor-server-content-negotiation:2.2.3")
32+
}
33+
34+
tasks.test {
35+
useJUnitPlatform()
36+
testLogging {
37+
showExceptions = true
38+
showStandardStreams = true
39+
exceptionFormat = TestExceptionFormat.FULL
40+
}
41+
}
42+
43+
tasks.withType<KotlinCompile> {
44+
kotlinOptions.jvmTarget = "11"
45+
}

src/main/kotlin/io/kotest/extensions/ktor/openapi/OpenApiBuilder.kt kotest-extensions-ktor-openapi-plugin/src/main/kotlin/io/kotest/extensions/ktor/openapi/OpenApiBuilder.kt

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class OpenApiBuilder(private val config: OpenApiConfig) {
4949

5050
val op = Operation()
5151
op.description = tracesByMethod.firstNotNullOfOrNull { it.description }
52+
op.deprecated = tracesByMethod.any { it.deprecated }
5253
op.responses = ApiResponses()
5354
op.parameters = mutableListOf()
5455

src/main/kotlin/io/kotest/extensions/ktor/openapi/Tracer.kt kotest-extensions-ktor-openapi-plugin/src/main/kotlin/io/kotest/extensions/ktor/openapi/Tracer.kt

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ data class Trace(
3636
var contentType: ContentType? = null,
3737
var responseBody: String? = null,
3838
var description: String?,
39+
var deprecated: Boolean = false,
3940
var pathParameterExamples: Map<String, String?>,
4041
) {
4142
companion object {

src/main/kotlin/io/kotest/extensions/ktor/openapi/OpenApiPlugin.kt kotest-extensions-ktor-openapi-plugin/src/main/kotlin/io/kotest/extensions/ktor/openapi/plugin.kt

+1-10
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,16 @@ import io.ktor.http.content.ByteArrayContent
55
import io.ktor.http.content.OutgoingContent
66
import io.ktor.http.content.OutputStreamContent
77
import io.ktor.http.content.TextContent
8-
import io.ktor.server.application.ApplicationCall
9-
import io.ktor.server.application.call
108
import io.ktor.server.application.createApplicationPlugin
119
import io.ktor.server.application.hooks.CallSetup
1210
import io.ktor.server.application.hooks.ResponseBodyReadyForSend
1311
import io.ktor.server.application.hooks.ResponseSent
1412
import io.ktor.server.request.httpMethod
1513
import io.ktor.server.routing.Routing
1614
import io.ktor.util.AttributeKey
17-
import io.ktor.util.pipeline.PipelineContext
1815
import io.ktor.utils.io.ByteChannel
1916
import io.ktor.utils.io.jvm.javaio.copyTo
2017
import java.io.ByteArrayOutputStream
21-
import java.nio.ByteBuffer
2218
import java.nio.file.Path
2319
import java.nio.file.Paths
2420

@@ -71,6 +67,7 @@ val KotestOpenApi = createApplicationPlugin("OpenApi", createConfiguration = ::O
7167
val trace = call.attributes[traceKey]
7268
trace.status = call.response.status()
7369
trace.description = call.attributes.getOrNull(DescriptionKey)
70+
trace.deprecated = call.attributes.getOrNull(DeprecatedKey) ?: false
7471
trace.pathParameterExamples = trace.pathParameters.associateWith { call.parameters[it] }
7572
this@createApplicationPlugin.pluginConfig.tracer.addTrace(trace)
7673
}
@@ -114,9 +111,3 @@ val KotestOpenApi = createApplicationPlugin("OpenApi", createConfiguration = ::O
114111
}
115112
}
116113
}
117-
118-
val DescriptionKey: AttributeKey<String> = AttributeKey("KotestOpenApiDescriptionKey")
119-
120-
fun PipelineContext<*, ApplicationCall>.description(desc: String) {
121-
call.attributes.put(DescriptionKey, desc)
122-
}

src/test/kotlin/io/kotest/extensions/ktor/openapi/OpenApiTest.kt kotest-extensions-ktor-openapi-plugin/src/test/kotlin/io/kotest/extensions/ktor/openapi/OpenApiTest.kt

+10-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package io.kotest.extensions.ktor.openapi
33
import io.kotest.core.spec.style.FunSpec
44
import io.ktor.client.request.delete
55
import io.ktor.client.request.get
6+
import io.ktor.client.request.patch
67
import io.ktor.client.request.post
78
import io.ktor.http.HttpStatusCode
89
import io.ktor.server.application.call
@@ -12,6 +13,7 @@ import io.ktor.server.auth.basic
1213
import io.ktor.server.response.respond
1314
import io.ktor.server.routing.delete
1415
import io.ktor.server.routing.get
16+
import io.ktor.server.routing.patch
1517
import io.ktor.server.routing.post
1618
import io.ktor.server.routing.route
1719
import io.ktor.server.testing.testApplication
@@ -41,14 +43,21 @@ class OpenApiTest : FunSpec() {
4143
description("Returns the user identified by the foo param")
4244
call.respond(HttpStatusCode.OK)
4345
}
46+
patch("/patchme") {
47+
deprecated(true)
48+
call.respond(HttpStatusCode.OK)
49+
}
4450
}
4551
authenticate("auth1", "auth2") {
4652
get("/users/{foo}") { call.respond(HttpStatusCode.OK) }
47-
delete("/with/param1/{foo}/even/{param2}") { call.respond(HttpStatusCode.OK) }
53+
delete("/with/param1/{foo}/even/{param2}") {
54+
call.respond(HttpStatusCode.OK)
55+
}
4856
}
4957
post("/bar2") { call.respond(HttpStatusCode.OK, "some response body") }
5058
}
5159
client.get("/internal/foo1")
60+
client.patch("/internal/patchme")
5261
client.post("/bar2").status
5362
client.get("/users/154363")
5463
client.delete("/with/param1/foo/even/param2")

settings.gradle.kts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
2+
rootProject.name = "kotest-extensions-ktor-openapi"
3+
4+
pluginManagement {
5+
repositories {
6+
mavenCentral()
7+
gradlePluginPortal()
8+
}
9+
}
10+
11+
include("kotest-extensions-ktor-openapi-model")
12+
include("kotest-extensions-ktor-openapi-plugin")

0 commit comments

Comments
 (0)