From 32ed640b6e8ccf4febef460997167d027de5d976 Mon Sep 17 00:00:00 2001 From: pricelees Date: Sun, 27 Jul 2025 12:32:55 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=A1=9C=EA=B7=B8=EC=95=84?= =?UTF-8?q?=EC=9B=83=20API=20=EC=9D=91=EB=8B=B5=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95(ok=20->=20noContent)=20=EB=B0=8F=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roomescape/auth/web/AuthController.kt | 2 +- .../roomescape/auth/web/AuthControllerTest.kt | 9 ++-- .../roomescape/util/RoomescapeApiTest.kt | 52 ++++++++++--------- 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/main/kotlin/roomescape/auth/web/AuthController.kt b/src/main/kotlin/roomescape/auth/web/AuthController.kt index 62f0db38..6e28741a 100644 --- a/src/main/kotlin/roomescape/auth/web/AuthController.kt +++ b/src/main/kotlin/roomescape/auth/web/AuthController.kt @@ -39,6 +39,6 @@ class AuthController( override fun logout(@MemberId memberId: Long): ResponseEntity> { authService.logout(memberId) - return ResponseEntity.ok(CommonApiResponse()) + return ResponseEntity.noContent().build() } } diff --git a/src/test/kotlin/roomescape/auth/web/AuthControllerTest.kt b/src/test/kotlin/roomescape/auth/web/AuthControllerTest.kt index 021477d4..4861f4ba 100644 --- a/src/test/kotlin/roomescape/auth/web/AuthControllerTest.kt +++ b/src/test/kotlin/roomescape/auth/web/AuthControllerTest.kt @@ -125,17 +125,20 @@ class AuthControllerTest( } } } - Given("로그아웃 요청을 보낼 때") { val endpoint = "/logout" - When("토큰의 유효성 & 회원 존재 여부와 무관하게") { + When("토큰으로 memberId 조회가 가능하면") { + every { + jwtHandler.getMemberIdFromToken(any()) + } returns 1L + Then("정상 응답한다.") { runPostTest( mockMvc = mockMvc, endpoint = endpoint, ) { - status { isOk() } + status { isNoContent() } } } } diff --git a/src/test/kotlin/roomescape/util/RoomescapeApiTest.kt b/src/test/kotlin/roomescape/util/RoomescapeApiTest.kt index e1874a72..b393d50a 100644 --- a/src/test/kotlin/roomescape/util/RoomescapeApiTest.kt +++ b/src/test/kotlin/roomescape/util/RoomescapeApiTest.kt @@ -42,24 +42,24 @@ abstract class RoomescapeApiTest : BehaviorSpec() { val user: MemberEntity = MemberFixture.user() fun runGetTest( - mockMvc: MockMvc, - endpoint: String, - log: Boolean = false, - assert: MockMvcResultMatchersDsl.() -> Unit + mockMvc: MockMvc, + endpoint: String, + log: Boolean = false, + assert: MockMvcResultMatchersDsl.() -> Unit ): ResultActionsDsl = mockMvc.get(endpoint) { - header(HttpHeaders.COOKIE, "accessToken=token") + header(HttpHeaders.AUTHORIZATION, "Bearer token") }.apply { log.takeIf { it }?.let { this.andDo { print() } } }.andExpect(assert) fun runPostTest( - mockMvc: MockMvc, - endpoint: String, - body: Any? = null, - log: Boolean = false, - assert: MockMvcResultMatchersDsl.() -> Unit + mockMvc: MockMvc, + endpoint: String, + body: Any? = null, + log: Boolean = false, + assert: MockMvcResultMatchersDsl.() -> Unit ): ResultActionsDsl = mockMvc.post(endpoint) { - this.header(HttpHeaders.COOKIE, "accessToken=token") + this.header(HttpHeaders.AUTHORIZATION, "Bearer token") body?.let { this.contentType = MediaType.APPLICATION_JSON this.content = objectMapper.writeValueAsString(it) @@ -69,12 +69,12 @@ abstract class RoomescapeApiTest : BehaviorSpec() { }.andExpect(assert) fun runDeleteTest( - mockMvc: MockMvc, - endpoint: String, - log: Boolean = false, - assert: MockMvcResultMatchersDsl.() -> Unit + mockMvc: MockMvc, + endpoint: String, + log: Boolean = false, + assert: MockMvcResultMatchersDsl.() -> Unit ): ResultActionsDsl = mockMvc.delete(endpoint) { - header(HttpHeaders.COOKIE, "accessToken=token") + header(HttpHeaders.AUTHORIZATION, "Bearer token") }.apply { log.takeIf { it }?.let { this.andDo { print() } } }.andExpect(assert) @@ -107,16 +107,20 @@ abstract class RoomescapeApiTest : BehaviorSpec() { } fun MvcResult.readValue(valueType: Class): T = this.response.contentAsString - .takeIf { it.isNotBlank() } - ?.let { readValue(it, valueType) } - ?: throw RuntimeException(""" + .takeIf { it.isNotBlank() } + ?.let { readValue(it, valueType) } + ?: throw RuntimeException( + """ [Test] Exception occurred while reading response json: ${this.response.contentAsString} with value type: $valueType - """.trimIndent()) + """.trimIndent() + ) fun readValue(responseJson: String, valueType: Class): T = objectMapper - .readTree(responseJson)["data"] - ?.let { objectMapper.convertValue(it, valueType) } - ?: throw RuntimeException(""" + .readTree(responseJson)["data"] + ?.let { objectMapper.convertValue(it, valueType) } + ?: throw RuntimeException( + """ [Test] Exception occurred while reading response json: $responseJson with value type: $valueType - """.trimIndent()) + """.trimIndent() + ) }