From 56ada7730cc615137282ab593a2605f10cfe21d8 Mon Sep 17 00:00:00 2001 From: pricelees Date: Fri, 15 Aug 2025 17:49:09 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=98=88=EC=95=BD=20=EA=B0=80=EB=8A=A5?= =?UTF-8?q?=20=EC=8B=9C=EA=B0=84=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roomescape/time/implement/TimeFinder.kt | 2 +- .../time/implement/TimeFinderTest.kt | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/roomescape/time/implement/TimeFinder.kt b/src/main/kotlin/roomescape/time/implement/TimeFinder.kt index 609a0fa3..60911a89 100644 --- a/src/main/kotlin/roomescape/time/implement/TimeFinder.kt +++ b/src/main/kotlin/roomescape/time/implement/TimeFinder.kt @@ -51,7 +51,7 @@ class TimeFinder( val allTimes: List = findAll() return allTimes.map { time -> - val isReservable: Boolean = reservations.any { reservation -> time.id == reservation.id } + val isReservable: Boolean = reservations.none { reservation -> time.id == reservation.time.id } TimeWithAvailability(time.id!!, time.startAt, date, themeId, isReservable) }.also { log.debug { "[TimeFinder.findAllWithAvailabilityByDateAndThemeId] ${it.size}개 조회 완료: date:$date, themeId=$themeId" } diff --git a/src/test/kotlin/roomescape/time/implement/TimeFinderTest.kt b/src/test/kotlin/roomescape/time/implement/TimeFinderTest.kt index 5c7c092d..ba6014a9 100644 --- a/src/test/kotlin/roomescape/time/implement/TimeFinderTest.kt +++ b/src/test/kotlin/roomescape/time/implement/TimeFinderTest.kt @@ -10,6 +10,7 @@ import io.mockk.mockk import io.mockk.verify import org.springframework.data.repository.findByIdOrNull import roomescape.reservation.implement.ReservationFinder +import roomescape.reservation.infrastructure.persistence.ReservationEntity import roomescape.time.business.domain.TimeWithAvailability import roomescape.theme.exception.ThemeErrorCode import roomescape.theme.exception.ThemeException @@ -105,5 +106,39 @@ class TimeFinderTest : FunSpec({ it.all { time -> time.isReservable } } } + + test("날짜, 테마에 맞는 예약이 있으면 예약할 수 없다.") { + val times = listOf( + TimeFixture.create(startAt = LocalTime.now()), + TimeFixture.create(startAt = LocalTime.now().plusMinutes(30)) + ) + every { + themeFinder.findById(themeId) + } returns mockk() + + every { + timeRepository.findAll() + } returns times + + every { + reservationFinder.findAllByDateAndTheme(date, any()) + } returns listOf( + mockk().apply { + every { time.id } returns times[0].id + }, + mockk().apply { + every { time.id } returns 0 + } + ) + + val result: List = + timeFinder.findAllWithAvailabilityByDateAndThemeId(date, themeId) + + assertSoftly(result) { + it shouldHaveSize 2 + it[0].isReservable shouldBe false + it[1].isReservable shouldBe true + } + } } })