generated from pricelees/issue-pr-template
<!-- 제목 양식 --> <!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) --> ## 📝 관련 이슈 및 PR **PR과 관련된 이슈 번호** - #30 ## ✨ 작업 내용 <!-- 어떤 작업을 했는지 알려주세요! --> - ReservationService를 읽기(Find) / 쓰기(Write) 서비스로 분리 - 모든 도메인에 repository를 사용하는 Finder, Writer, Validator 도입 -> ReservationService에 있는 조회, 검증, 쓰기 작업을 별도의 클래스로 분리하기 위함이었고, 이 과정에서 다른 도메인에도 도입함. ## 🧪 테스트 <!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! --> 새로 추가된 기능 & 클래스는 모두 테스트 추가하였고, 작업 후 전체 테스트 완료 ## 📚 참고 자료 및 기타 <!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! --> Reviewed-on: #31 Co-authored-by: pricelees <priceelees@gmail.com> Co-committed-by: pricelees <priceelees@gmail.com>
58 lines
2.1 KiB
Kotlin
58 lines
2.1 KiB
Kotlin
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
|
|
import roomescape.time.infrastructure.persistence.TimeEntity
|
|
import roomescape.util.MemberFixture
|
|
import roomescape.util.ReservationFixture
|
|
import roomescape.util.ThemeFixture
|
|
import roomescape.util.TimeFixture
|
|
import java.time.LocalDate
|
|
import java.time.LocalTime
|
|
|
|
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) }
|
|
|
|
for (i in 1..reservedCount) {
|
|
val time: TimeEntity = TimeFixture.create(
|
|
startAt = LocalTime.now().plusMinutes(i.toLong())
|
|
).also { entityManager.persist(it) }
|
|
|
|
ReservationFixture.create(
|
|
date = date,
|
|
theme = themeEntity,
|
|
member = member,
|
|
time = time,
|
|
status = ReservationStatus.entries.random()
|
|
).also { entityManager.persist(it) }
|
|
}
|
|
|
|
entityManager.flush()
|
|
entityManager.clear()
|
|
|
|
return themeEntity
|
|
}
|
|
}
|