From 022742d1facd07d79dd11810d9ec18be396a7306 Mon Sep 17 00:00:00 2001 From: pricelees Date: Mon, 6 Oct 2025 17:33:01 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=9D=BC=EC=A0=95=20=EC=9E=AC?= =?UTF-8?q?=ED=99=9C=EC=84=B1=ED=99=94=20=EC=8A=A4=EC=BC=80=EC=A5=B4?= =?UTF-8?q?=EB=A7=81=20=EC=9E=91=EC=97=85=EC=97=90=EC=84=9C=20=EC=98=88?= =?UTF-8?q?=EC=95=BD=EC=9D=B4=20=EC=97=86=EB=8A=94=20=EC=9D=BC=EC=A0=95=20?= =?UTF-8?q?->=20PENDING=20=EC=98=88=EC=95=BD=EC=9D=B4=20=EC=97=86=EB=8A=94?= =?UTF-8?q?=20=EC=9D=BC=EC=A0=95=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/ScheduleRepository.kt | 2 +- .../IncompletedReservationSchedulerTest.kt | 27 +++++++++++++++++++ .../roomescape/supports/DummyInitializer.kt | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/schedule/infrastructure/persistence/ScheduleRepository.kt b/service/src/main/kotlin/com/sangdol/roomescape/schedule/infrastructure/persistence/ScheduleRepository.kt index 87a38a58..08f9ffb3 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/schedule/infrastructure/persistence/ScheduleRepository.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/schedule/infrastructure/persistence/ScheduleRepository.kt @@ -140,7 +140,7 @@ interface ScheduleRepository : JpaRepository { AND NOT EXISTS ( SELECT 1 FROM ReservationEntity r - WHERE r.scheduleId = s._id + WHERE r.scheduleId = s._id AND r.status = com.sangdol.roomescape.reservation.infrastructure.persistence.ReservationStatus.PENDING ) """ ) diff --git a/service/src/test/kotlin/com/sangdol/roomescape/reservation/IncompletedReservationSchedulerTest.kt b/service/src/test/kotlin/com/sangdol/roomescape/reservation/IncompletedReservationSchedulerTest.kt index c317525f..4b2db0d9 100644 --- a/service/src/test/kotlin/com/sangdol/roomescape/reservation/IncompletedReservationSchedulerTest.kt +++ b/service/src/test/kotlin/com/sangdol/roomescape/reservation/IncompletedReservationSchedulerTest.kt @@ -8,6 +8,7 @@ import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus import com.sangdol.roomescape.supports.FunSpecSpringbootTest +import com.sangdol.roomescape.supports.initialize import com.sangdol.roomescape.user.infrastructure.persistence.UserEntity import io.kotest.assertions.assertSoftly import io.kotest.matchers.shouldBe @@ -47,6 +48,32 @@ class IncompletedReservationSchedulerTest( } } + test("예약이 있어도, 해당 예약이 ${ReservationStatus.PENDING}이 상태가 아니면 hold_expired_at 시간이 지난 ${ScheduleStatus.HOLD} 일정을 ${ScheduleStatus.AVAILABLE} 상태로 바꾼다.") { + val schedule = initialize("취소된 예약 추가") { + val reservation = dummyInitializer.createConfirmReservation( + user = testAuthUtil.defaultUserLogin().first, + ).also { + it.status = ReservationStatus.CANCELED + reservationRepository.saveAndFlush(it) + } + + scheduleRepository.findByIdOrNull(reservation.scheduleId)!!.apply { + this.status = ScheduleStatus.HOLD + this.holdExpiredAt = Instant.now().minusSeconds(1) + scheduleRepository.saveAndFlush(this) + } + } + + transactionExecutionUtil.withNewTransaction(isReadOnly = false) { + incompletedReservationScheduler.processExpiredHoldSchedule() + } + + assertSoftly(scheduleRepository.findByIdOrNull(schedule.id)!!) { + this.status shouldBe ScheduleStatus.AVAILABLE + this.holdExpiredAt shouldBe null + } + } + test("${ReservationStatus.PENDING} 상태로 일정 시간 완료되지 않은 예약을 ${ReservationStatus.EXPIRED} 상태로 바꾼다.") { val user: UserEntity = testAuthUtil.defaultUserLogin().first val reservation = dummyInitializer.createPendingReservation(user = user).also { diff --git a/service/src/test/kotlin/com/sangdol/roomescape/supports/DummyInitializer.kt b/service/src/test/kotlin/com/sangdol/roomescape/supports/DummyInitializer.kt index 3e71288a..7560805f 100644 --- a/service/src/test/kotlin/com/sangdol/roomescape/supports/DummyInitializer.kt +++ b/service/src/test/kotlin/com/sangdol/roomescape/supports/DummyInitializer.kt @@ -147,6 +147,7 @@ class DummyInitializer( scheduleRepository.findByIdOrNull(it.scheduleId)?.let { schedule -> schedule.status = ScheduleStatus.RESERVED + schedule.holdExpiredAt = null scheduleRepository.save(schedule) } }