Skip to content

Commit 5a7729b

Browse files
committed
Ignore content-type header when route expects none.
1 parent b1cbf4c commit 5a7729b

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ data class RequestPredicate(
5555
matchedAcceptType(acceptedMediaTypes) != null
5656

5757
private fun contentTypeMatches(contentType: String?) =
58-
if (consumes.isEmpty() && contentType == null) true
59-
else if (contentType == null) false
60-
else consumes.any { MediaType.parse(contentType).`is`(MediaType.parse(it)) }
58+
when {
59+
consumes.isEmpty() -> true
60+
contentType == null -> false
61+
else -> consumes.any { MediaType.parse(contentType).`is`(MediaType.parse(it)) }
62+
}
6163
}
6264

6365
internal data class RequestMatchResult(

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,23 @@ class RequestHandlerTest {
147147
assert(handler.filterInvocations).isEqualTo(2)
148148
}
149149

150+
@Test
151+
fun `should ignore content-type header when handler expects none`() {
152+
153+
val handler = TestRequestHandlerWithFilter()
154+
val response = handler.handleRequest(
155+
APIGatewayProxyRequestEvent()
156+
.withPath("/some")
157+
.withHttpMethod("GET")
158+
.withHeaders(mapOf(
159+
"Accept" to "application/json",
160+
"content-type" to "application/json"
161+
)), mockk()
162+
)
163+
164+
assert(response.statusCode).isEqualTo(200)
165+
}
166+
150167
@Test
151168
fun `should handle deserialization error`() {
152169

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ class RouterTest {
3131
@Test
3232
fun `should register routes`() {
3333
val router = router {
34-
PUT("/some") { r: Request<Unit> -> ResponseEntity.ok("") }
35-
PATCH("/some") { r: Request<Unit> -> ResponseEntity.ok("") }
36-
DELETE("/some") { r: Request<Unit> -> ResponseEntity.ok("") }
37-
POST("/some") { r: Request<Unit> -> ResponseEntity.ok("") }
34+
PUT("/some") { _: Request<Unit> -> ResponseEntity.ok("") }
35+
PATCH("/some") { _: Request<Unit> -> ResponseEntity.ok("") }
36+
DELETE("/some") { _: Request<Unit> -> ResponseEntity.ok("") }
37+
POST("/some") { _: Request<Unit> -> ResponseEntity.ok("") }
3838
}
3939

4040
then(router.routes.map { it.requestPredicate.method }).containsOnly("PUT", "PATCH", "DELETE", "POST")

0 commit comments

Comments
 (0)