fix: 예약 가능 시간 조회 로직 오류 수정 및 테스트 케이스 추가

This commit is contained in:
이상진 2025-08-15 17:49:09 +09:00
parent b05c61a65a
commit 56ada7730c
2 changed files with 36 additions and 1 deletions

View File

@ -51,7 +51,7 @@ class TimeFinder(
val allTimes: List<TimeEntity> = findAll() val allTimes: List<TimeEntity> = findAll()
return allTimes.map { time -> 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) TimeWithAvailability(time.id!!, time.startAt, date, themeId, isReservable)
}.also { }.also {
log.debug { "[TimeFinder.findAllWithAvailabilityByDateAndThemeId] ${it.size}개 조회 완료: date:$date, themeId=$themeId" } log.debug { "[TimeFinder.findAllWithAvailabilityByDateAndThemeId] ${it.size}개 조회 완료: date:$date, themeId=$themeId" }

View File

@ -10,6 +10,7 @@ import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import org.springframework.data.repository.findByIdOrNull import org.springframework.data.repository.findByIdOrNull
import roomescape.reservation.implement.ReservationFinder import roomescape.reservation.implement.ReservationFinder
import roomescape.reservation.infrastructure.persistence.ReservationEntity
import roomescape.time.business.domain.TimeWithAvailability import roomescape.time.business.domain.TimeWithAvailability
import roomescape.theme.exception.ThemeErrorCode import roomescape.theme.exception.ThemeErrorCode
import roomescape.theme.exception.ThemeException import roomescape.theme.exception.ThemeException
@ -105,5 +106,39 @@ class TimeFinderTest : FunSpec({
it.all { time -> time.isReservable } 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<ReservationEntity>().apply {
every { time.id } returns times[0].id
},
mockk<ReservationEntity>().apply {
every { time.id } returns 0
}
)
val result: List<TimeWithAvailability> =
timeFinder.findAllWithAvailabilityByDateAndThemeId(date, themeId)
assertSoftly(result) {
it shouldHaveSize 2
it[0].isReservable shouldBe false
it[1].isReservable shouldBe true
}
}
} }
}) })