feature #6: start to implement path for article

This commit is contained in:
2019-07-25 16:57:53 +02:00
parent ea4b05ebb3
commit 0d2c46538f
5 changed files with 47 additions and 54 deletions

4
.idea/gradle.xml generated
View File

@@ -3,9 +3,11 @@
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="delegatedBuild" value="true" />
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" /> <option name="gradleJvm" value="11" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />

View File

@@ -1,17 +1,18 @@
package fr.dcproject package fr.dcproject
import io.ktor.application.* import fr.dcproject.routes.article
import io.ktor.response.* import io.ktor.application.Application
import io.ktor.request.* import io.ktor.application.install
import io.ktor.routing.* import io.ktor.auth.Authentication
import io.ktor.http.* import io.ktor.features.ContentNegotiation
import io.ktor.locations.* import io.ktor.gson.gson
import io.ktor.auth.* import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.gson.* import io.ktor.locations.Locations
import io.ktor.features.* import io.ktor.routing.Routing
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args) fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
@KtorExperimentalLocationsAPI
@Suppress("unused") // Referenced in application.conf @Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads @kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) { fun Application.module(testing: Boolean = false) {
@@ -26,36 +27,8 @@ fun Application.module(testing: Boolean = false) {
} }
} }
routing { install(Routing) {
get("/") { article()
call.respondText("HELLO WORLD!", contentType = ContentType.Text.Plain)
} }
get<MyLocation> {
call.respondText("Location: name=${it.name}, arg1=${it.arg1}, arg2=${it.arg2}")
} }
// Register nested routes
get<Type.Edit> {
call.respondText("Inside $it")
}
get<Type.List> {
call.respondText("Inside $it")
}
get("/json/gson") {
call.respond(mapOf("hello" to "world"))
}
}
}
@Location("/location/{name}")
class MyLocation(val name: String, val arg1: Int = 42, val arg2: String = "default")
@Location("/type/{name}") data class Type(val name: String) {
@Location("/edit")
data class Edit(val type: Type)
@Location("/list/{page}")
data class List(val type: Type, val page: Int)
}

15
src/routes/Article.kt Normal file
View File

@@ -0,0 +1,15 @@
package fr.dcproject.routes
import Paths
import io.ktor.application.call
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.get
import io.ktor.response.respondText
import io.ktor.routing.Route
@KtorExperimentalLocationsAPI
fun Route.article() {
get<Paths.ArticlesRequest> {
call.respondText("todo")
}
}

8
src/routes/Paths.kt Normal file
View File

@@ -0,0 +1,8 @@
import io.ktor.locations.KtorExperimentalLocationsAPI
import io.ktor.locations.Location
@KtorExperimentalLocationsAPI
object Paths {
@Location("/articles") class ArticlesRequest
@Location("/articles") class PostArticleRequest
}

View File

@@ -1,24 +1,19 @@
package fr.dcproject package fr.dcproject
import io.ktor.application.* import io.ktor.http.HttpMethod
import io.ktor.response.* import io.ktor.http.HttpStatusCode
import io.ktor.request.* import io.ktor.server.testing.handleRequest
import io.ktor.routing.* import io.ktor.server.testing.withTestApplication
import io.ktor.http.* import kotlin.test.Test
import io.ktor.locations.* import kotlin.test.assertEquals
import io.ktor.auth.*
import io.ktor.gson.*
import io.ktor.features.*
import kotlin.test.*
import io.ktor.server.testing.*
class ApplicationTest { class ApplicationTest {
@Test @Test
fun testRoot() { fun testRoot() {
withTestApplication({ module(testing = true) }) { withTestApplication({ module(testing = true) }) {
handleRequest(HttpMethod.Get, "/").apply { handleRequest(HttpMethod.Get, "/articles").apply {
assertEquals(HttpStatusCode.OK, response.status()) assertEquals(HttpStatusCode.OK, response.status())
assertEquals("HELLO WORLD!", response.content) assertEquals("todo", response.content)
} }
} }
} }