From 0beebb9b40be333912eff15a744c785837dfb12c Mon Sep 17 00:00:00 2001 From: Leonid Stashevsky Date: Tue, 6 Sep 2022 08:04:41 +0200 Subject: [PATCH] KTOR-678 Add test for Auth with Jackson (#3154) --- .../ktor-server-auth/build.gradle.kts | 6 ++ .../io/ktor/tests/auth/AuthWithPlugins.kt | 59 +++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 ktor-server/ktor-server-plugins/ktor-server-auth/jvm/test/io/ktor/tests/auth/AuthWithPlugins.kt diff --git a/ktor-server/ktor-server-plugins/ktor-server-auth/build.gradle.kts b/ktor-server/ktor-server-plugins/ktor-server-auth/build.gradle.kts index 64177ff28f..41312f929e 100644 --- a/ktor-server/ktor-server-plugins/ktor-server-auth/build.gradle.kts +++ b/ktor-server/ktor-server-plugins/ktor-server-auth/build.gradle.kts @@ -26,5 +26,11 @@ kotlin { api(project(":ktor-server:ktor-server-test-host")) } } + jvmTest { + dependencies { + api(project(":ktor-server:ktor-server-plugins:ktor-server-content-negotiation")) + api(project(":ktor-shared:ktor-serialization:ktor-serialization-jackson")) + } + } } } diff --git a/ktor-server/ktor-server-plugins/ktor-server-auth/jvm/test/io/ktor/tests/auth/AuthWithPlugins.kt b/ktor-server/ktor-server-plugins/ktor-server-auth/jvm/test/io/ktor/tests/auth/AuthWithPlugins.kt new file mode 100644 index 0000000000..d27c8164ae --- /dev/null +++ b/ktor-server/ktor-server-plugins/ktor-server-auth/jvm/test/io/ktor/tests/auth/AuthWithPlugins.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2014-2022 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + */ + +package io.ktor.tests.auth + +import io.ktor.client.request.* +import io.ktor.http.* +import io.ktor.serialization.jackson.* +import io.ktor.server.application.* +import io.ktor.server.auth.* +import io.ktor.server.plugins.contentnegotiation.* +import io.ktor.server.response.* +import io.ktor.server.routing.* +import io.ktor.server.testing.* +import kotlin.test.* + +class AuthWithPlugins { + + @Test + fun testFormAuthWithJackson() = testApplication { + install(ContentNegotiation) { + jackson() + } + install(Authentication) { + form { + challenge("/unauthorized") + validate { credentials -> + if (credentials.name == credentials.password) { + UserIdPrincipal(credentials.name) + } else { + null + } + } + } + } + + routing { + get("/unauthorized") { + call.respond(HttpStatusCode.Unauthorized, "Unauthorized") + } + authenticate { + post("/test") { + call.respondText("OK") + } + } + } + + val response = client.post("/test") { + header(HttpHeaders.ContentType, ContentType.Application.Json) + setBody("{}") + } + + assertEquals(HttpStatusCode.Found, response.status) + + val location = response.headers[HttpHeaders.Location] ?: fail("Location header is missing") + assertEquals("/unauthorized", location) + } +}