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 } }