refactor: 테스트간 격리를 위한 데이터베이스 로직 beforeSpec -> beforeTest 변경

This commit is contained in:
이상진 2025-07-18 01:31:00 +09:00
parent f517752e44
commit 6165d173ce

View File

@ -5,24 +5,18 @@ import io.kotest.matchers.collections.shouldContainInOrder
import io.kotest.matchers.shouldBe
import jakarta.persistence.EntityManager
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
import org.springframework.transaction.support.TransactionTemplate
import roomescape.theme.util.TestThemeCreateUtil
import java.time.LocalDate
@DataJpaTest
class ThemeRepositoryTest(
val themeRepository: ThemeRepository,
val transactionTemplate: TransactionTemplate,
val entityManager: EntityManager
) : FunSpec() {
init {
beforeSpec {
/**
* 테마 10개를 생성한다.
* 이름: "테마N", 예약 : N, 날짜: 오늘 기준으로 N일
*/
transactionTemplate.executeWithoutResult {
context("findTopNThemeBetweenStartDateAndEndDate") {
beforeTest {
for (i in 1..10) {
TestThemeCreateUtil.createThemeWithReservations(
entityManager = entityManager,
@ -32,9 +26,7 @@ class ThemeRepositoryTest(
)
}
}
}
context("findTopNThemeBetweenStartDateAndEndDate") {
test("지난 10일간 예약 수가 가장 많은 테마 5개를 조회한다.") {
themeRepository.findTopNThemeBetweenStartDateAndEndDate(
LocalDate.now().minusDays(10),
@ -115,10 +107,10 @@ class ThemeRepositoryTest(
val themeName = "test-theme"
beforeTest {
TestThemeCreateUtil.createThemeWithReservations(
entityManager = entityManager,
name = themeName,
reservedCount = 0,
date = LocalDate.now()
entityManager = entityManager,
name = themeName,
reservedCount = 0,
date = LocalDate.now()
)
}
test("테마 이름이 존재하면 true를 반환한다.") {
@ -133,20 +125,20 @@ class ThemeRepositoryTest(
context("isReservedTheme") {
test("테마가 예약 중이면 true를 반환한다.") {
val theme = TestThemeCreateUtil.createThemeWithReservations(
entityManager = entityManager,
name = "예약된 테마",
reservedCount = 1,
date = LocalDate.now()
entityManager = entityManager,
name = "예약된 테마",
reservedCount = 1,
date = LocalDate.now()
)
themeRepository.isReservedTheme(theme.id!!) shouldBe true
}
test("테마가 예약 중이 아니면 false를 반환한다.") {
val theme = TestThemeCreateUtil.createThemeWithReservations(
entityManager = entityManager,
name = "예약되지 않은 테마",
reservedCount = 0,
date = LocalDate.now()
entityManager = entityManager,
name = "예약되지 않은 테마",
reservedCount = 0,
date = LocalDate.now()
)
themeRepository.isReservedTheme(theme.id!!) shouldBe false
}