65 lines
2.0 KiB
Kotlin

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