From 69d96a6f81d8a5b02c0752725618b7181ad8db33 Mon Sep 17 00:00:00 2001 From: pricelees Date: Sun, 13 Jul 2025 20:51:07 +0900 Subject: [PATCH] =?UTF-8?q?test:=20RoomescapeApiTest=EC=97=90=20POST=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=EB=90=9C=20MemberRepository=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roomescape/common/RoomescapeApiTest.kt | 38 ++++++++++++++++--- .../member/controller/MemberControllerTest.kt | 8 ++-- .../view/controller/PageControllerTest.kt | 18 ++++----- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/test/java/roomescape/common/RoomescapeApiTest.kt b/src/test/java/roomescape/common/RoomescapeApiTest.kt index a67cf87e..6c4701ce 100644 --- a/src/test/java/roomescape/common/RoomescapeApiTest.kt +++ b/src/test/java/roomescape/common/RoomescapeApiTest.kt @@ -3,6 +3,7 @@ package roomescape.common import com.ninjasquad.springmockk.MockkBean import io.kotest.core.spec.style.BehaviorSpec import io.mockk.every +import io.restassured.http.ContentType import io.restassured.module.kotlin.extensions.Given import io.restassured.module.kotlin.extensions.Then import io.restassured.module.kotlin.extensions.When @@ -10,13 +11,17 @@ import io.restassured.response.ValidatableResponse import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.web.server.LocalServerPort import org.springframework.data.repository.findByIdOrNull +import org.springframework.http.HttpStatus import roomescape.member.infrastructure.persistence.Member import roomescape.member.infrastructure.persistence.MemberRepository import roomescape.system.auth.infrastructure.jwt.JwtHandler +import roomescape.system.exception.ErrorType +import roomescape.system.exception.RoomEscapeException const val NOT_LOGGED_IN_USERID: Long = 0; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@NoSqlInitialize class RoomescapeApiTest( @LocalServerPort val port: Int? = 9090, ) : BehaviorSpec() { @@ -27,31 +32,50 @@ class RoomescapeApiTest( @MockkBean lateinit var jwtHandler: JwtHandler + val admin: Member = MemberFixture.admin() val user: Member = MemberFixture.user() - fun runTest(endpoint: String, assert: ValidatableResponse.() -> Unit): ValidatableResponse { + fun runGetTest(endpoint: String, token: String? = "token", assert: ValidatableResponse.() -> Unit): ValidatableResponse { return Given { port(port!!) - header("Cookie", "accessToken=token") + header("Cookie", "accessToken=$token") } When { get(endpoint) } Then assert } + fun runPostTest( + endpoint: String, + token: String? = "token", + body: Any? = null, + assert: ValidatableResponse.() -> Unit + ): ValidatableResponse { + return Given { + port(port!!) + contentType(ContentType.JSON) + body?.let { body(it) } + header("Cookie", "accessToken=$token") + } When { + post(endpoint) + } Then assert + } + fun setUpAdmin() { every { jwtHandler.getMemberIdFromToken(any()) - } returns admin.id + } returns admin.id!! + every { memberRepository.existsById(admin.id!!) } returns true every { memberRepository.findByIdOrNull(admin.id!!) } returns admin } fun setUpUser() { every { jwtHandler.getMemberIdFromToken(any()) - } returns user.id + } returns user.id!! + every { memberRepository.existsById(user.id!!) } returns true every { memberRepository.findByIdOrNull(user.id!!) } returns user } @@ -60,6 +84,10 @@ class RoomescapeApiTest( jwtHandler.getMemberIdFromToken(any()) } returns NOT_LOGGED_IN_USERID + every { memberRepository.existsById(NOT_LOGGED_IN_USERID) } throws RoomEscapeException( + ErrorType.LOGIN_REQUIRED, + HttpStatus.FORBIDDEN + ) every { memberRepository.findByIdOrNull(NOT_LOGGED_IN_USERID) } returns null } -} \ No newline at end of file +} diff --git a/src/test/java/roomescape/member/controller/MemberControllerTest.kt b/src/test/java/roomescape/member/controller/MemberControllerTest.kt index 2297c194..f268c327 100644 --- a/src/test/java/roomescape/member/controller/MemberControllerTest.kt +++ b/src/test/java/roomescape/member/controller/MemberControllerTest.kt @@ -8,11 +8,9 @@ import io.mockk.every import io.restassured.module.kotlin.extensions.Extract import org.hamcrest.Matchers.containsString import roomescape.common.MemberFixture -import roomescape.common.NoSqlInitialize import roomescape.common.RoomescapeApiTest import roomescape.member.web.MembersResponse -@NoSqlInitialize class MemberControllerTest : RoomescapeApiTest() { init { @@ -29,7 +27,7 @@ class MemberControllerTest : RoomescapeApiTest() { setUpAdmin() then("성공한다.") { - val result: Any = runTest(endpoint) { + val result: Any = runGetTest(endpoint) { statusCode(200) } Extract { path("data") @@ -48,7 +46,7 @@ class MemberControllerTest : RoomescapeApiTest() { then("비회원") { setUpNotLoggedIn() - runTest(endpoint) { + runGetTest(endpoint) { statusCode(200) body(containsString("Login")) } @@ -57,7 +55,7 @@ class MemberControllerTest : RoomescapeApiTest() { then("일반 회원") { setUpUser() - runTest(endpoint) { + runGetTest(endpoint) { statusCode(200) body(containsString("Login")) } diff --git a/src/test/java/roomescape/view/controller/PageControllerTest.kt b/src/test/java/roomescape/view/controller/PageControllerTest.kt index 746c75fc..825467b5 100644 --- a/src/test/java/roomescape/view/controller/PageControllerTest.kt +++ b/src/test/java/roomescape/view/controller/PageControllerTest.kt @@ -1,10 +1,8 @@ package roomescape.view.controller import org.hamcrest.Matchers.containsString -import roomescape.common.NoSqlInitialize import roomescape.common.RoomescapeApiTest -@NoSqlInitialize class PageControllerTest() : RoomescapeApiTest() { init { @@ -14,7 +12,7 @@ class PageControllerTest() : RoomescapeApiTest() { then("비회원") { setUpNotLoggedIn() - runTest(it) { + runGetTest(it) { statusCode(200) } } @@ -22,7 +20,7 @@ class PageControllerTest() : RoomescapeApiTest() { then("회원") { setUpUser() - runTest(it) { + runGetTest(it) { statusCode(200) } } @@ -30,7 +28,7 @@ class PageControllerTest() : RoomescapeApiTest() { then("관리자") { setUpAdmin() - runTest(it) { + runGetTest(it) { statusCode(200) } } @@ -44,7 +42,7 @@ class PageControllerTest() : RoomescapeApiTest() { setUpAdmin() then("성공한다.") { - runTest(it) { + runGetTest(it) { statusCode(200) } } @@ -54,7 +52,7 @@ class PageControllerTest() : RoomescapeApiTest() { setUpUser() then("로그인 페이지로 이동한다.") { - runTest(it) { + runGetTest(it) { statusCode(200) body(containsString("Login")) } @@ -69,14 +67,14 @@ class PageControllerTest() : RoomescapeApiTest() { then("회원") { setUpUser() - runTest(it) { + runGetTest(it) { statusCode(200) } } then("관리자") { setUpAdmin() - runTest(it) { + runGetTest(it) { statusCode(200) } } @@ -86,7 +84,7 @@ class PageControllerTest() : RoomescapeApiTest() { then("로그인 페이지로 이동한다.") { setUpNotLoggedIn() - runTest(it) { + runGetTest(it) { statusCode(200) body(containsString("Login")) }