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