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("