Implement first routes & tests
install Koin install kotest declare first events create EventStream
This commit is contained in:
25
src/test/kotlin/eventDemo/app/actions/Client.kt
Normal file
25
src/test/kotlin/eventDemo/app/actions/Client.kt
Normal file
@@ -0,0 +1,25 @@
|
||||
package eventDemo.app.actions
|
||||
|
||||
import eventDemo.plugins.UUIDSerializer
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
|
||||
import io.ktor.serialization.kotlinx.json.json
|
||||
import io.ktor.server.testing.ApplicationTestBuilder
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.modules.SerializersModule
|
||||
import java.util.UUID
|
||||
|
||||
fun ApplicationTestBuilder.httpClient(): HttpClient {
|
||||
return createClient {
|
||||
install(ContentNegotiation) {
|
||||
json(
|
||||
Json {
|
||||
serializersModule =
|
||||
SerializersModule {
|
||||
contextual(UUID::class) { UUIDSerializer }
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
61
src/test/kotlin/eventDemo/app/actions/PutCardTest.kt
Normal file
61
src/test/kotlin/eventDemo/app/actions/PutCardTest.kt
Normal file
@@ -0,0 +1,61 @@
|
||||
package eventDemo.app.actions
|
||||
|
||||
import eventDemo.app.Card
|
||||
import eventDemo.app.EventStream
|
||||
import eventDemo.app.GameId
|
||||
import eventDemo.app.PlayCardEvent
|
||||
import eventDemo.module
|
||||
import io.kotest.core.spec.style.FunSpec
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.accept
|
||||
import io.ktor.client.request.get
|
||||
import io.ktor.client.request.post
|
||||
import io.ktor.client.request.setBody
|
||||
import io.ktor.http.ContentType.Application.Json
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.http.contentType
|
||||
import io.ktor.server.testing.testApplication
|
||||
import org.koin.core.context.stopKoin
|
||||
import org.koin.ktor.ext.inject
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class PutCardTest : FunSpec({
|
||||
test("/game/{id}/card") {
|
||||
testApplication {
|
||||
val client = httpClient()
|
||||
application {
|
||||
stopKoin()
|
||||
module()
|
||||
}
|
||||
val id = GameId().toString()
|
||||
client.post("/game/$id/card") {
|
||||
contentType(Json)
|
||||
accept(Json)
|
||||
setBody(Card.Simple(1, Card.Color.Blue))
|
||||
}.apply {
|
||||
assertEquals(status, HttpStatusCode.OK)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test("/game/{id}/card/last") {
|
||||
testApplication {
|
||||
val client = httpClient()
|
||||
val id = GameId()
|
||||
val card = Card.Simple(1, Card.Color.Blue)
|
||||
application {
|
||||
stopKoin()
|
||||
module()
|
||||
val eventStream by inject<EventStream<GameId>>()
|
||||
eventStream.publish(
|
||||
PlayCardEvent(id, card),
|
||||
)
|
||||
}
|
||||
|
||||
client.get("/game/$id/card/last").apply {
|
||||
assertEquals(HttpStatusCode.OK, status)
|
||||
assertEquals(card, this.call.body<Card>())
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -1,23 +0,0 @@
|
||||
package io.github.flecomte
|
||||
|
||||
import io.github.flecomte.plugins.configureRouting
|
||||
import io.ktor.client.request.get
|
||||
import io.ktor.client.statement.bodyAsText
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.server.testing.testApplication
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class ApplicationTest {
|
||||
@Test
|
||||
fun testRoot() =
|
||||
testApplication {
|
||||
application {
|
||||
configureRouting()
|
||||
}
|
||||
client.get("/").apply {
|
||||
assertEquals(HttpStatusCode.OK, status)
|
||||
assertEquals("Hello World!", bodyAsText())
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user