Skip to content

Commit 10fa220

Browse files
blockvotemduesterhoeft
authored andcommitted
Make path parameters mandatory (#15)
1 parent b645499 commit 10fa220

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

router/src/main/kotlin/io/moia/router/Router.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ data class Request<I>(val apiRequest: APIGatewayProxyRequestEvent, val body: I,
7878
val pathParameters by lazy { UriTemplate.from(pathPattern).extract(apiRequest.path) }
7979
val queryParameters: Map<String, String>? by lazy { apiRequest.queryStringParameters }
8080
val multiValueQueryStringParameters: Map<String, List<String>>? by lazy { apiRequest.multiValueQueryStringParameters }
81-
fun getPathParameter(name: String): String? = pathParameters[name]
81+
fun getPathParameter(name: String): String = pathParameters[name] ?: error("Could not find path parameter '$name")
8282
fun getQueryParameter(name: String): String? = queryParameters?.get(name)
8383
fun getMultiValueQueryStringParameter(name: String): List<String>? = multiValueQueryStringParameters?.get(name)
8484
}

router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt

+16
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import assertk.assertions.isTrue
99
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent
1010
import io.mockk.mockk
1111
import io.moia.router.Router.Companion.router
12+
import org.junit.jupiter.api.Assertions.assertEquals
1213
import org.junit.jupiter.api.Test
1314

1415
class RequestHandlerTest {
@@ -371,6 +372,17 @@ class RequestHandlerTest {
371372
)
372373
}
373374

375+
@Test
376+
fun `Not existing path parameter should throw an error`() {
377+
val response = testRequestHandler.handleRequest(
378+
GET("/non-existing-path-parameter")
379+
.withHeader("accept", "application/json"),
380+
mockk()
381+
)
382+
assertEquals(500, response.statusCode)
383+
assertEquals("{\"message\":\"Could not find path parameter 'foo\",\"code\":\"INTERNAL_SERVER_ERROR\",\"details\":{}}", response.body)
384+
}
385+
374386
class TestRequestHandlerAuthorization : RequestHandler() {
375387
override val router = router {
376388
GET("/some") { _: Request<Unit> ->
@@ -475,6 +487,10 @@ class RequestHandlerTest {
475487
DELETE("/delete-me") { _: Request<Unit> ->
476488
ResponseEntity.noContent()
477489
}
490+
GET("/non-existing-path-parameter") { request: Request<Unit> ->
491+
request.getPathParameter("foo")
492+
ResponseEntity.ok(null)
493+
}
478494
}
479495
}
480496

0 commit comments

Comments
 (0)