diff --git a/CHANGELOG.md b/CHANGELOG.md index ae5bbdc26..eded242b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Added ### Changed +- Fix serialization for api key location in api key auth configuration ### Remove diff --git a/kompendium-oas/build.gradle.kts b/kompendium-oas/build.gradle.kts index 6c010bd98..cd0afa9b9 100644 --- a/kompendium-oas/build.gradle.kts +++ b/kompendium-oas/build.gradle.kts @@ -18,6 +18,10 @@ sourdough { dependencies { implementation(group = "org.jetbrains.kotlinx", "kotlinx-serialization-json", version = "1.3.2") + + // TESTING + + testImplementation(testFixtures(projects.kompendiumCore)) } testing { diff --git a/kompendium-oas/src/main/kotlin/io/bkbn/kompendium/oas/security/ApiKeyAuth.kt b/kompendium-oas/src/main/kotlin/io/bkbn/kompendium/oas/security/ApiKeyAuth.kt index 32c07d316..719a4583b 100644 --- a/kompendium-oas/src/main/kotlin/io/bkbn/kompendium/oas/security/ApiKeyAuth.kt +++ b/kompendium-oas/src/main/kotlin/io/bkbn/kompendium/oas/security/ApiKeyAuth.kt @@ -1,20 +1,18 @@ package io.bkbn.kompendium.oas.security import kotlinx.serialization.Serializable -import java.util.Locale // TODO... is there even an official ktor api auth mechanism?? @Serializable -@Suppress("UnusedPrivateMember") -class ApiKeyAuth(val `in`: ApiKeyLocation, val name: String) : SecuritySchema { +class ApiKeyAuth private constructor(val `in`: String, val name: String) : SecuritySchema { val type: String = "apiKey" - enum class ApiKeyLocation { - HEADER, - QUERY, - COOKIE; + constructor(location: ApiKeyLocation, name: String) : this(location.value, name) - override fun toString(): String = name.lowercase(Locale.getDefault()) + enum class ApiKeyLocation(val value: String) { + HEADER("header"), + QUERY("query"), + COOKIE("cookie"); } } diff --git a/kompendium-oas/src/test/kotlin/io/bkbn/kompendium/oas/security/ApiKeyAuthTest.kt b/kompendium-oas/src/test/kotlin/io/bkbn/kompendium/oas/security/ApiKeyAuthTest.kt new file mode 100644 index 000000000..93f051cb6 --- /dev/null +++ b/kompendium-oas/src/test/kotlin/io/bkbn/kompendium/oas/security/ApiKeyAuthTest.kt @@ -0,0 +1,25 @@ +package io.bkbn.kompendium.oas.security + +import io.kotest.core.spec.style.DescribeSpec +import io.kotest.matchers.shouldBe +import kotlinx.serialization.json.Json + +private val json = Json { encodeDefaults = true } + +class ApiKeyAuthTest : DescribeSpec({ + describe("ApiKeyAuth") { + it("should produce correct json") { + mapOf( + ApiKeyAuth.ApiKeyLocation.HEADER to "header", + ApiKeyAuth.ApiKeyLocation.COOKIE to "cookie", + ApiKeyAuth.ApiKeyLocation.QUERY to "query", + ).forEach { + val example = ApiKeyAuth(it.key, "test-name") + + val json = json.encodeToString(ApiKeyAuth.serializer(), example) + + json.shouldBe("""{"in":"${it.value}","name":"test-name","type":"apiKey"}""") + } + } + } +})