diff --git a/src/main/kotlin/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecification.kt b/src/main/kotlin/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecification.kt index fb6d01e8..f760a897 100644 --- a/src/main/kotlin/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecification.kt +++ b/src/main/kotlin/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecification.kt @@ -33,6 +33,10 @@ class ReservationSearchSpecification( } }) + fun status(vararg statuses: ReservationStatus) = andIfNotNull { root, _, cb -> + root.get("status").`in`(statuses.toList()) + } + fun confirmed(): ReservationSearchSpecification = andIfNotNull { root, _, cb -> cb.or( cb.equal( diff --git a/src/test/kotlin/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecificationTest.kt b/src/test/kotlin/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecificationTest.kt index 88323f85..c9cf5570 100644 --- a/src/test/kotlin/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecificationTest.kt +++ b/src/test/kotlin/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecificationTest.kt @@ -81,6 +81,21 @@ class ReservationSearchSpecificationTest( } } + "여러 상태를 입력받아 같은 상태안 예약을 조회한다." { + val spec = ReservationSearchSpecification() + .status( + ReservationStatus.CONFIRMED, + ReservationStatus.CONFIRMED_PAYMENT_REQUIRED, + ReservationStatus.WAITING + ).build() + + val results: List = reservationRepository.findAll(spec) + + assertSoftly(results) { + this shouldHaveSize reservationRepository.findAll().size + } + } + "확정 상태인 예약을 조회한다" { val spec = ReservationSearchSpecification() .confirmed()