test(01-05): rewrite ApplicationTest to assert GET /health without Postgres
- Replace testRoot template assertion with 'health endpoint returns 200 with status ok'
- Compose only configureRouting() in testApplication — NOT Application.module()
- This keeps the test independent of Database.migrate / running Postgres (D-11 test invariant)
- Install ContentNegotiation { json() } inside application { } — production module() does it,
but the test composes routing directly and must install the plugin itself
- All imports explicit (D-11 allWarningsAsErrors); no wildcards
- Body checked via substring for "status" + "ok" — robust to JSON field ordering
Note: ./gradlew :server:test runtime verification deferred to Plan 07 (integration build)
since build-logic/recipe.jvm.server plugin is being authored in parallel Plan 02 worktree.
This commit is contained in:
@@ -1,20 +1,30 @@
|
||||
package dev.ulfrx.recipe
|
||||
|
||||
import io.ktor.client.request.*
|
||||
import io.ktor.client.statement.*
|
||||
import io.ktor.http.*
|
||||
import io.ktor.server.testing.*
|
||||
import kotlin.test.*
|
||||
import io.ktor.client.request.get
|
||||
import io.ktor.client.statement.bodyAsText
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.serialization.kotlinx.json.json
|
||||
import io.ktor.server.application.install
|
||||
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
|
||||
import io.ktor.server.testing.testApplication
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class ApplicationTest {
|
||||
|
||||
@Test
|
||||
fun testRoot() = testApplication {
|
||||
fun `health endpoint returns 200 with status ok`() = testApplication {
|
||||
application {
|
||||
module()
|
||||
install(ContentNegotiation) {
|
||||
json()
|
||||
}
|
||||
val response = client.get("/")
|
||||
configureRouting()
|
||||
}
|
||||
val response = client.get("/health")
|
||||
assertEquals(HttpStatusCode.OK, response.status)
|
||||
assertEquals("Ktor: ${Greeting().greet()}", response.bodyAsText())
|
||||
val body = response.bodyAsText()
|
||||
assertTrue(body.contains("\"status\""), "expected body to contain status field, was: $body")
|
||||
assertTrue(body.contains("\"ok\""), "expected body to contain ok value, was: $body")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user