diff --git a/src/test/kotlin/roomescape/util/KotestConfig.kt b/src/test/kotlin/roomescape/util/KotestConfig.kt index 782520cf..a808def5 100644 --- a/src/test/kotlin/roomescape/util/KotestConfig.kt +++ b/src/test/kotlin/roomescape/util/KotestConfig.kt @@ -1,9 +1,73 @@ package roomescape.util import io.kotest.core.config.AbstractProjectConfig +import io.kotest.core.spec.Spec +import io.kotest.core.spec.style.BehaviorSpec +import io.kotest.core.spec.style.FunSpec +import io.kotest.core.spec.style.StringSpec import io.kotest.extensions.spring.SpringExtension import io.kotest.extensions.spring.SpringTestExtension +import io.restassured.RestAssured +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.boot.test.web.server.LocalServerPort +import roomescape.member.infrastructure.persistence.MemberRepository +import roomescape.util.CleanerMode.AFTER_EACH_TEST object KotestConfig : AbstractProjectConfig() { override fun extensions(): List = listOf(SpringExtension) } + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +abstract class FunSpecSpringbootTest : FunSpec({ + extension(DatabaseCleanerExtension(mode = AFTER_EACH_TEST)) +}) { + @Autowired + private lateinit var memberRepository: MemberRepository + + @LocalServerPort + var port: Int = 0 + + lateinit var loginUtil: LoginUtil + + override suspend fun beforeSpec(spec: Spec) { + RestAssured.port = port + loginUtil = LoginUtil(memberRepository) + } +} + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +abstract class StringSpecSpringbootTest : StringSpec({ + extension(DatabaseCleanerExtension(mode = AFTER_EACH_TEST)) +}) { + @Autowired + private lateinit var memberRepository: MemberRepository + + @LocalServerPort + var port: Int = 0 + + lateinit var loginUtil: LoginUtil + + override suspend fun beforeSpec(spec: Spec) { + RestAssured.port = port + loginUtil = LoginUtil(memberRepository) + } +} + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +abstract class BehaviorSpecSpringbootTest : BehaviorSpec({ + extension(DatabaseCleanerExtension(mode = AFTER_EACH_TEST)) +}) { + @Autowired + private lateinit var memberRepository: MemberRepository + + @LocalServerPort + var port: Int = 0 + + lateinit var loginUtil: LoginUtil + + override suspend fun beforeSpec(spec: Spec) { + RestAssured.port = port + loginUtil = LoginUtil(memberRepository) + } +}