Skip to content

Commit b645499

Browse files
blockvotemduesterhoeft
authored andcommitted
Add helper functions for query parameters (#14)
* Add helper functions for query parameters * Add query parameter values to Request data class * Add another test for query param parsing * Add another test for query param parsing
1 parent 628c569 commit b645499

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

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

+4
Original file line numberDiff line numberDiff line change
@@ -76,5 +76,9 @@ class RouterFunction<I, T>(
7676
data class Request<I>(val apiRequest: APIGatewayProxyRequestEvent, val body: I, val pathPattern: String = apiRequest.path) {
7777

7878
val pathParameters by lazy { UriTemplate.from(pathPattern).extract(apiRequest.path) }
79+
val queryParameters: Map<String, String>? by lazy { apiRequest.queryStringParameters }
80+
val multiValueQueryStringParameters: Map<String, List<String>>? by lazy { apiRequest.multiValueQueryStringParameters }
7981
fun getPathParameter(name: String): String? = pathParameters[name]
82+
fun getQueryParameter(name: String): String? = queryParameters?.get(name)
83+
fun getMultiValueQueryStringParameter(name: String): List<String>? = multiValueQueryStringParameters?.get(name)
8084
}

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

+35
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package io.moia.router
33
import assertk.assert
44
import assertk.assertions.isEqualTo
55
import assertk.assertions.isFalse
6+
import assertk.assertions.isNotNull
67
import assertk.assertions.isNullOrEmpty
78
import assertk.assertions.isTrue
89
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent
@@ -352,6 +353,24 @@ class RequestHandlerTest {
352353
assert(response.statusCode).isEqualTo(204)
353354
}
354355

356+
@Test
357+
fun `Should handle query parameters successfully`() {
358+
TestQueryParamParsingHandler().handleRequest(
359+
GET("/search")
360+
.withQueryStringParameters(mapOf(
361+
"testQueryParam" to "foo"
362+
))
363+
.withMultiValueQueryStringParameters(mapOf(
364+
"testMultiValueQueryStringParam" to listOf("foo", "bar")
365+
)),
366+
mockk()
367+
)
368+
TestQueryParamParsingHandler().handleRequest(
369+
GET("/search?testQueryParam=foo&testMultiValueQueryStringParam=foo&testMultiValueQueryStringParam=bar"),
370+
mockk()
371+
)
372+
}
373+
355374
class TestRequestHandlerAuthorization : RequestHandler() {
356375
override val router = router {
357376
GET("/some") { _: Request<Unit> ->
@@ -423,6 +442,7 @@ class RequestHandlerTest {
423442
throw IllegalArgumentException("boom")
424443
}
425444
GET("/some/{id}") { r: Request<Unit> ->
445+
assert(r.pathParameters.containsKey("id")).isTrue()
426446
ResponseEntity.ok(
427447
TestResponse(
428448
"Hello ${r.getPathParameter("id")}"
@@ -457,4 +477,19 @@ class RequestHandlerTest {
457477
}
458478
}
459479
}
480+
481+
class TestQueryParamParsingHandler : RequestHandler() {
482+
483+
override val router = router {
484+
GET("/search") { r: Request<TestRequestHandler.TestRequest> ->
485+
assert(r.getQueryParameter("testQueryParam")).isNotNull()
486+
assert(r.getQueryParameter("testQueryParam")).isEqualTo("foo")
487+
assert(r.queryParameters!!["testQueryParam"]).isNotNull()
488+
assert(r.getMultiValueQueryStringParameter("testMultiValueQueryStringParam")).isNotNull()
489+
assert(r.getMultiValueQueryStringParameter("testMultiValueQueryStringParam")).isEqualTo(listOf("foo", "bar"))
490+
assert(r.multiValueQueryStringParameters!!["testMultiValueQueryStringParam"]).isNotNull()
491+
ResponseEntity.ok(null)
492+
}
493+
}
494+
}
460495
}

0 commit comments

Comments
 (0)