Skip to content

Commit b51d705

Browse files
blockvotemduesterhoeft
authored andcommitted
Add test for a request handler with multiple serializers depending on… (#16)
* Add test for a request handler with multiple serializers depending on the accept header * Update router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt
1 parent 10fa220 commit b51d705

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

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

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import assertk.assertions.isNotNull
77
import assertk.assertions.isNullOrEmpty
88
import assertk.assertions.isTrue
99
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent
10+
import com.google.common.net.MediaType
1011
import io.mockk.mockk
1112
import io.moia.router.Router.Companion.router
1213
import org.junit.jupiter.api.Assertions.assertEquals
@@ -383,6 +384,26 @@ class RequestHandlerTest {
383384
assertEquals("{\"message\":\"Could not find path parameter 'foo\",\"code\":\"INTERNAL_SERVER_ERROR\",\"details\":{}}", response.body)
384385
}
385386

387+
@Test
388+
fun `Handler should return the content type that is accepted`() {
389+
val jsonResponse = AcceptTypeDependingHandler().handleRequest(
390+
GET("/all-objects")
391+
.withHeader("accept", "application/json"),
392+
mockk()
393+
)
394+
assertEquals(200, jsonResponse.statusCode)
395+
assertEquals("application/json", jsonResponse.getHeaderCaseInsensitive("content-type"))
396+
assertEquals("[{\"text\":\"foo\",\"number\":1},{\"text\":\"bar\",\"number\":2}]", jsonResponse.body)
397+
val plainTextResponse = AcceptTypeDependingHandler().handleRequest(
398+
GET("/all-objects")
399+
.withHeader("accept", "text/plain"),
400+
mockk()
401+
)
402+
assertEquals(200, plainTextResponse.statusCode)
403+
assertEquals("text/plain", plainTextResponse.getHeaderCaseInsensitive("content-type"))
404+
assertEquals("[CustomObject(text=foo, number=1), CustomObject(text=bar, number=2)]", plainTextResponse.body)
405+
}
406+
386407
class TestRequestHandlerAuthorization : RequestHandler() {
387408
override val router = router {
388409
GET("/some") { _: Request<Unit> ->
@@ -508,4 +529,33 @@ class RequestHandlerTest {
508529
}
509530
}
510531
}
511-
}
532+
533+
class AcceptTypeDependingHandler : RequestHandler() {
534+
535+
data class CustomObject(val text: String, val number: Int)
536+
537+
class PlainTextSerializationHandler : SerializationHandler {
538+
override fun supports(acceptHeader: MediaType, body: Any): Boolean {
539+
return acceptHeader.`is`(MediaType.parse("text/plain"))
540+
}
541+
542+
override fun serialize(acceptHeader: MediaType, body: Any): String {
543+
return body.toString()
544+
}
545+
}
546+
547+
override fun serializationHandlers() =
548+
listOf(JsonSerializationHandler(objectMapper), PlainTextSerializationHandler())
549+
550+
override fun deserializationHandlers() =
551+
listOf(JsonDeserializationHandler(objectMapper))
552+
553+
override val router = router {
554+
defaultConsuming = setOf("application/json", "text/plain")
555+
defaultProducing = setOf("application/json", "text/plain")
556+
GET("/all-objects") { _: Request<Unit> ->
557+
ResponseEntity.ok(body = listOf(CustomObject("foo", 1), CustomObject("bar", 2)))
558+
}
559+
}
560+
}
561+
}

0 commit comments

Comments
 (0)