generated from pricelees/issue-pr-template
119 lines
4.2 KiB
Kotlin
119 lines
4.2 KiB
Kotlin
package roomescape.reservation.business
|
|
|
|
import io.kotest.assertions.assertSoftly
|
|
import io.kotest.assertions.throwables.shouldThrow
|
|
import io.kotest.core.spec.style.FunSpec
|
|
import io.kotest.matchers.collections.shouldHaveSize
|
|
import io.kotest.matchers.shouldBe
|
|
import io.mockk.every
|
|
import io.mockk.mockk
|
|
import roomescape.reservation.exception.ReservationErrorCode
|
|
import roomescape.reservation.exception.ReservationException
|
|
import roomescape.reservation.implement.ReservationFinder
|
|
import roomescape.reservation.infrastructure.persistence.ReservationStatus
|
|
import roomescape.reservation.web.MyReservationRetrieveResponse
|
|
import roomescape.util.MemberFixture
|
|
import roomescape.util.ReservationFixture
|
|
import roomescape.util.ThemeFixture
|
|
import java.time.LocalDate
|
|
|
|
class ReservationQueryServiceTest : FunSpec({
|
|
|
|
val reservationFinder: ReservationFinder = mockk()
|
|
val reservationFindService = ReservationFindService(reservationFinder)
|
|
|
|
context("findReservations") {
|
|
test("정상 응답") {
|
|
val confirmedReservations = listOf(
|
|
ReservationFixture.create(status = ReservationStatus.CONFIRMED),
|
|
ReservationFixture.create(status = ReservationStatus.CONFIRMED_PAYMENT_REQUIRED)
|
|
)
|
|
every {
|
|
reservationFinder.findAllByStatuses(*ReservationStatus.confirmedStatus())
|
|
} returns confirmedReservations
|
|
|
|
val response = reservationFindService.findReservations()
|
|
|
|
assertSoftly(response.reservations) {
|
|
this shouldHaveSize 2
|
|
}
|
|
}
|
|
}
|
|
|
|
context("findAllWaiting") {
|
|
test("정상 응답") {
|
|
val waitingReservations = listOf(
|
|
ReservationFixture.create(status = ReservationStatus.WAITING),
|
|
ReservationFixture.create(status = ReservationStatus.WAITING)
|
|
)
|
|
every {
|
|
reservationFinder.findAllByStatuses(ReservationStatus.WAITING)
|
|
} returns waitingReservations
|
|
|
|
val response = reservationFindService.findAllWaiting()
|
|
|
|
assertSoftly(response.reservations) {
|
|
this shouldHaveSize 2
|
|
}
|
|
}
|
|
}
|
|
|
|
context("findReservationsByMemberId") {
|
|
val memberId = 1L
|
|
test("정상 응답") {
|
|
val myReservations = listOf<MyReservationRetrieveResponse>(mockk(), mockk())
|
|
|
|
every {
|
|
reservationFinder.findAllByMemberId(memberId)
|
|
} returns myReservations
|
|
|
|
val response = reservationFindService.findReservationsByMemberId(memberId)
|
|
|
|
response.reservations shouldHaveSize 2
|
|
}
|
|
}
|
|
|
|
context("searchReservations") {
|
|
val themeId = 1L
|
|
val memberId = 1L
|
|
val startFrom = LocalDate.now()
|
|
val endAt = LocalDate.now().plusDays(1)
|
|
|
|
test("정상 응답") {
|
|
val searchedReservations = listOf(
|
|
ReservationFixture.create(
|
|
theme = ThemeFixture.create(themeId),
|
|
member = MemberFixture.create(memberId),
|
|
date = startFrom
|
|
)
|
|
)
|
|
|
|
every {
|
|
reservationFinder.searchReservations(themeId, memberId, startFrom, endAt)
|
|
} returns searchedReservations
|
|
|
|
val response = reservationFindService.searchReservations(themeId, memberId, startFrom, endAt)
|
|
|
|
assertSoftly(response.reservations) {
|
|
this shouldHaveSize 1
|
|
this[0].theme.id shouldBe themeId
|
|
this[0].member.id shouldBe memberId
|
|
this[0].date shouldBe startFrom
|
|
}
|
|
}
|
|
|
|
test("종료 날짜가 시작 날짜 이전이면 예외 응답") {
|
|
val invalidEndAt = startFrom.minusDays(1)
|
|
every {
|
|
reservationFinder.searchReservations(themeId, memberId, startFrom, invalidEndAt)
|
|
} throws ReservationException(ReservationErrorCode.INVALID_SEARCH_DATE_RANGE)
|
|
|
|
shouldThrow<ReservationException> {
|
|
reservationFindService.searchReservations(themeId, memberId, startFrom, invalidEndAt)
|
|
}.also {
|
|
it.errorCode shouldBe ReservationErrorCode.INVALID_SEARCH_DATE_RANGE
|
|
}
|
|
}
|
|
}
|
|
})
|