diff --git a/src/test/kotlin/roomescape/theme/util/TestThemeCreateUtil.kt b/src/test/kotlin/roomescape/theme/util/TestThemeDataHelper.kt similarity index 58% rename from src/test/kotlin/roomescape/theme/util/TestThemeCreateUtil.kt rename to src/test/kotlin/roomescape/theme/util/TestThemeDataHelper.kt index 72381b78..9df5f6a3 100644 --- a/src/test/kotlin/roomescape/theme/util/TestThemeCreateUtil.kt +++ b/src/test/kotlin/roomescape/theme/util/TestThemeDataHelper.kt @@ -1,6 +1,7 @@ package roomescape.theme.util import jakarta.persistence.EntityManager +import org.springframework.transaction.support.TransactionTemplate import roomescape.member.infrastructure.persistence.MemberEntity import roomescape.reservation.infrastructure.persistence.ReservationStatus import roomescape.theme.infrastructure.persistence.ThemeEntity @@ -12,13 +13,25 @@ import roomescape.util.TimeFixture import java.time.LocalDate import java.time.LocalTime -object TestThemeCreateUtil { - fun createThemeWithReservations( - entityManager: EntityManager, - name: String, - reservedCount: Int, - date: LocalDate, - ): ThemeEntity { +class TestThemeDataHelper( + val entityManager: EntityManager, + val transactionTemplate: TransactionTemplate? +) { + /** + * GET /themes/most-reserved-last-week API와 관련 Repository 테스트에 사용 + * @param name: 테마 이름 + * @param reservedCount: 이 테마가 예약된 횟수 + * @param date: reservedCount 개의 예약을 만들 때 사용할 날짜 + */ + fun createThemeWithReservations(name: String, reservedCount: Int, date: LocalDate): ThemeEntity = + if (transactionTemplate == null) { + createAndGet(name, reservedCount, date) + } else { + transactionTemplate.execute { createAndGet(name, reservedCount, date) }!! + } + + + fun createAndGet(name: String, reservedCount: Int, date: LocalDate): ThemeEntity { val themeEntity: ThemeEntity = ThemeFixture.create(name = name).also { entityManager.persist(it) } val member: MemberEntity = MemberFixture.create().also { entityManager.persist(it) } @@ -32,7 +45,7 @@ object TestThemeCreateUtil { theme = themeEntity, member = member, time = time, - status = ReservationStatus.CONFIRMED + status = ReservationStatus.entries.random() ).also { entityManager.persist(it) } }