From 2c8146ff2da38a09210964d15b71b213a10358ef Mon Sep 17 00:00:00 2001 From: pricelees Date: Sat, 12 Jul 2025 19:57:33 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20API=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roomescape/common/RoomescapeApiTest.kt | 65 ++++++++++++++ .../view/controller/PageControllerTest.kt | 85 +++---------------- 2 files changed, 76 insertions(+), 74 deletions(-) create mode 100644 src/test/java/roomescape/common/RoomescapeApiTest.kt diff --git a/src/test/java/roomescape/common/RoomescapeApiTest.kt b/src/test/java/roomescape/common/RoomescapeApiTest.kt new file mode 100644 index 00000000..6f6c872d --- /dev/null +++ b/src/test/java/roomescape/common/RoomescapeApiTest.kt @@ -0,0 +1,65 @@ +package roomescape.common + +import com.ninjasquad.springmockk.MockkBean +import io.kotest.core.spec.style.BehaviorSpec +import io.mockk.every +import io.restassured.module.kotlin.extensions.Given +import io.restassured.module.kotlin.extensions.Then +import io.restassured.module.kotlin.extensions.When +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 roomescape.member.infrastructure.entity.Member +import roomescape.member.infrastructure.entity.MemberRepository +import roomescape.system.auth.jwt.JwtHandler + +const val NOT_LOGGED_IN_USERID: Long = 0; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +class RoomescapeApiTest( + @LocalServerPort val port: Int? = 9090, +) : BehaviorSpec() { + + @MockkBean + lateinit var memberRepository: MemberRepository + + @MockkBean + lateinit var jwtHandler: JwtHandler + + val admin: Member = MemberFixture.admin() + val user: Member = MemberFixture.user() + + fun runTest(endpoint: String, assert: ValidatableResponse.() -> Unit): ValidatableResponse { + return Given { + port(port!!) + header("Cookie", "accessToken=token") + } When { + get(endpoint) + } Then assert + } + + fun setUpAdmin() { + every { + jwtHandler.getMemberIdFromToken(any()) + } returns admin.id + + every { memberRepository.findByIdOrNull(admin.id!!) } returns admin + } + + fun setUpUser() { + every { + jwtHandler.getMemberIdFromToken(any()) + } returns user.id + + every { memberRepository.findByIdOrNull(user.id!!) } returns user + } + + fun setUpNotLoggedIn() { + every { + jwtHandler.getMemberIdFromToken(any()) + } returns NOT_LOGGED_IN_USERID + + every { memberRepository.findByIdOrNull(NOT_LOGGED_IN_USERID) } returns null + } +} \ No newline at end of file diff --git a/src/test/java/roomescape/view/controller/PageControllerTest.kt b/src/test/java/roomescape/view/controller/PageControllerTest.kt index 21d09e77..746c75fc 100644 --- a/src/test/java/roomescape/view/controller/PageControllerTest.kt +++ b/src/test/java/roomescape/view/controller/PageControllerTest.kt @@ -1,54 +1,26 @@ package roomescape.view.controller -import com.ninjasquad.springmockk.MockkBean -import io.kotest.core.spec.style.BehaviorSpec -import io.mockk.every -import io.restassured.module.kotlin.extensions.Given -import io.restassured.module.kotlin.extensions.Then -import io.restassured.module.kotlin.extensions.When -import io.restassured.response.ValidatableResponse import org.hamcrest.Matchers.containsString -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.boot.test.web.server.LocalServerPort -import org.springframework.http.HttpStatus -import roomescape.common.MemberFixture import roomescape.common.NoSqlInitialize -import roomescape.member.infrastructure.entity.Member -import roomescape.member.business.MemberService -import roomescape.system.auth.jwt.JwtHandler -import roomescape.system.exception.ErrorType -import roomescape.system.exception.RoomEscapeException +import roomescape.common.RoomescapeApiTest -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @NoSqlInitialize -class PageControllerTest( - @LocalServerPort val port: Int, -) : BehaviorSpec() { - - @MockkBean - private lateinit var jwtHandler: JwtHandler - - @MockkBean - private lateinit var memberService: MemberService - - private val admin: Member = MemberFixture.admin() - private val user: Member = MemberFixture.user() - +class PageControllerTest() : RoomescapeApiTest() { init { listOf("/", "/login").forEach { given("GET $it 요청은") { `when`("로그인 및 권한 여부와 관계없이 성공한다.") { then("비회원") { + setUpNotLoggedIn() + runTest(it) { statusCode(200) } } then("회원") { - every { - jwtHandler.getMemberIdFromToken(any()) - } returns user.id + setUpUser() runTest(it) { statusCode(200) @@ -56,9 +28,7 @@ class PageControllerTest( } then("관리자") { - every { - jwtHandler.getMemberIdFromToken(any()) - } returns admin.id + setUpAdmin() runTest(it) { statusCode(200) @@ -71,9 +41,7 @@ class PageControllerTest( listOf("/admin", "/admin/reservation", "/admin/time", "/admin/theme", "/admin/waiting").forEach { given("GET $it 요청을") { `when`("관리자가 보내면") { - every { - jwtHandler.getMemberIdFromToken(any()) - } returns admin.id + setUpAdmin() then("성공한다.") { runTest(it) { @@ -83,9 +51,7 @@ class PageControllerTest( } `when`("회원이 보내면") { - every { - jwtHandler.getMemberIdFromToken(any()) - } returns user.id + setUpUser() then("로그인 페이지로 이동한다.") { runTest(it) { @@ -101,18 +67,14 @@ class PageControllerTest( given("GET $it 요청을") { `when`("로그인 된 회원이 보내면 성공한다.") { then("회원") { - every { - jwtHandler.getMemberIdFromToken(any()) - } returns user.id + setUpUser() runTest(it) { statusCode(200) } } then("관리자") { - every { - jwtHandler.getMemberIdFromToken(any()) - } returns admin.id + setUpAdmin() runTest(it) { statusCode(200) @@ -122,9 +84,7 @@ class PageControllerTest( `when`("로그인 없이 보내면") { then("로그인 페이지로 이동한다.") { - every { - jwtHandler.getMemberIdFromToken(any()) - } returns null + setUpNotLoggedIn() runTest(it) { statusCode(200) @@ -135,27 +95,4 @@ class PageControllerTest( } } } - - fun runTest(endpoint: String, assert: ValidatableResponse.() -> Unit) { - setUpMocks() - - Given { - port(port) - header("Cookie", "accessToken=token") - } When { - get(endpoint) - } Then assert - } - - private fun setUpMocks() { - every { memberService.findMemberById(admin.id) } returns admin - - every { memberService.findMemberById(user.id) } returns user - - every { memberService.findMemberById(null) } throws RoomEscapeException( - ErrorType.MEMBER_NOT_FOUND, - String.format("[memberId: %d]", null), - HttpStatus.BAD_REQUEST - ) - } } \ No newline at end of file