From 14d0148a313d9115bc40895c349ad1c7881d9eda Mon Sep 17 00:00:00 2001 From: Yannick Block Date: Tue, 30 Apr 2019 15:49:26 +0200 Subject: [PATCH 1/2] Make response location optional --- .../kotlin/io/moia/router/ResponseEntity.kt | 4 +-- .../io/moia/router/RequestHandlerTest.kt | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/router/src/main/kotlin/io/moia/router/ResponseEntity.kt b/router/src/main/kotlin/io/moia/router/ResponseEntity.kt index 544ff816..1bc5a3a8 100644 --- a/router/src/main/kotlin/io/moia/router/ResponseEntity.kt +++ b/router/src/main/kotlin/io/moia/router/ResponseEntity.kt @@ -11,8 +11,8 @@ data class ResponseEntity( fun ok(body: T? = null, headers: Map = emptyMap()) = ResponseEntity(200, body, headers) - fun created(body: T? = null, location: URI, headers: Map = emptyMap()) = - ResponseEntity(201, body, headers + ("location" to location.toString())) + fun created(body: T? = null, location: URI? = null, headers: Map = emptyMap()) = + ResponseEntity(201, body, if (location == null) headers else headers + ("location" to location.toString())) fun noContent(headers: Map = emptyMap()) = ResponseEntity(204, null, headers) diff --git a/router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt b/router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt index c6cc24bf..83645138 100644 --- a/router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt +++ b/router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt @@ -2,11 +2,14 @@ package io.moia.router import assertk.assert import assertk.assertions.isEqualTo +import assertk.assertions.isFalse import assertk.assertions.isNullOrEmpty +import assertk.assertions.isTrue import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent import io.mockk.mockk import io.moia.router.Router.Companion.router import org.junit.jupiter.api.Test +import java.net.URI class RequestHandlerTest { @@ -278,6 +281,33 @@ class RequestHandlerTest { assert(response.body).isNullOrEmpty() } + @Test + fun `Create should not return a location header`() { + val response = testRequestHandler.handleRequest( + POST("/create-without-location") + .withHeader("Accept", "application/json") + .withHeader("Content-Type", "application/json") + .withBody("""{ "greeting": "some" }"""), + mockk() + ) + assert(response.statusCode).isEqualTo(201) + assert(response.headers.containsKey("location")).isFalse() + } + + @Test + fun `Create should return a location header`() { + val response = testRequestHandler.handleRequest( + POST("/create-with-location") + .withHeader("Accept", "application/json") + .withHeader("Content-Type", "application/json") + .withBody("""{ "greeting": "some" }"""), + mockk() + ) + assert(response.statusCode).isEqualTo(201) + assert(response.headers.containsKey("location")).isTrue() + assert(response.headers["location"]).isEqualTo("http://localhost/test") + } + class TestRequestHandlerAuthorization : RequestHandler() { override val router = router { GET("/some") { _: Request -> @@ -372,6 +402,12 @@ class RequestHandlerTest { POST("/no-content") { _: Request -> ResponseEntity.noContent() } + POST("/create-without-location") { _: Request -> + ResponseEntity.created(null, null, emptyMap()) + } + POST("/create-with-location") { r: Request -> + ResponseEntity.created(null, r.apiRequest.location("test"), emptyMap()) + } } } } \ No newline at end of file From 0f35060e831fc88f60851ebda32cdb71aae123da Mon Sep 17 00:00:00 2001 From: Yannick Block Date: Tue, 30 Apr 2019 15:52:04 +0200 Subject: [PATCH 2/2] Format kotlin --- router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt b/router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt index 83645138..34dc1613 100644 --- a/router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt +++ b/router/src/test/kotlin/io/moia/router/RequestHandlerTest.kt @@ -9,7 +9,6 @@ import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent import io.mockk.mockk import io.moia.router.Router.Companion.router import org.junit.jupiter.api.Test -import java.net.URI class RequestHandlerTest {