generated from pricelees/issue-pr-template
test: PaymentService 코틀린 테스트 추가
- 검증이 불필요하다고 느껴지는 로직은 생략
This commit is contained in:
parent
c308401f3f
commit
8577b68496
129
src/test/java/roomescape/payment/business/PaymentServiceKTest.kt
Normal file
129
src/test/java/roomescape/payment/business/PaymentServiceKTest.kt
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
package roomescape.payment.business
|
||||||
|
|
||||||
|
import io.kotest.assertions.assertSoftly
|
||||||
|
import io.kotest.assertions.throwables.shouldThrow
|
||||||
|
import io.kotest.core.spec.style.FunSpec
|
||||||
|
import io.kotest.matchers.shouldBe
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.just
|
||||||
|
import io.mockk.mockk
|
||||||
|
import io.mockk.runs
|
||||||
|
import org.springframework.http.HttpStatus
|
||||||
|
import roomescape.common.exception.ErrorType
|
||||||
|
import roomescape.common.exception.RoomescapeException
|
||||||
|
import roomescape.payment.infrastructure.persistence.CanceledPaymentRepository
|
||||||
|
import roomescape.payment.infrastructure.persistence.PaymentRepository
|
||||||
|
import roomescape.payment.web.PaymentCancel
|
||||||
|
import roomescape.util.PaymentFixture
|
||||||
|
import java.time.OffsetDateTime
|
||||||
|
|
||||||
|
class PaymentServiceKTest : FunSpec({
|
||||||
|
val paymentRepository: PaymentRepository = mockk()
|
||||||
|
val canceledPaymentRepository: CanceledPaymentRepository = mockk()
|
||||||
|
|
||||||
|
val paymentService = PaymentService(paymentRepository, canceledPaymentRepository)
|
||||||
|
|
||||||
|
context("cancelPaymentByAdmin") {
|
||||||
|
val reservationId = 1L
|
||||||
|
test("reservationId로 paymentKey를 찾을 수 없으면 예외를 던진다.") {
|
||||||
|
every { paymentRepository.findPaymentKeyByReservationId(reservationId) } returns null
|
||||||
|
|
||||||
|
val exception = shouldThrow<RoomescapeException> {
|
||||||
|
paymentService.cancelPaymentByAdmin(reservationId)
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSoftly(exception) {
|
||||||
|
this.errorType shouldBe ErrorType.PAYMENT_NOT_FOUND
|
||||||
|
this.httpStatus shouldBe HttpStatus.NOT_FOUND
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
context("reservationId로 paymentKey를 찾고난 후") {
|
||||||
|
val paymentKey = "test-payment-key"
|
||||||
|
|
||||||
|
every {
|
||||||
|
paymentRepository.findPaymentKeyByReservationId(reservationId)
|
||||||
|
} returns paymentKey
|
||||||
|
|
||||||
|
test("해당 paymentKey로 paymentEntity를 찾을 수 없으면 예외를 던진다.") {
|
||||||
|
every {
|
||||||
|
paymentRepository.findByPaymentKey(paymentKey)
|
||||||
|
} returns null
|
||||||
|
|
||||||
|
val exception = shouldThrow<RoomescapeException> {
|
||||||
|
paymentService.cancelPaymentByAdmin(reservationId)
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSoftly(exception) {
|
||||||
|
this.errorType shouldBe ErrorType.PAYMENT_NOT_FOUND
|
||||||
|
this.httpStatus shouldBe HttpStatus.NOT_FOUND
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test("해당 paymentKey로 paymentEntity를 찾고, cancelPaymentEntity를 저장한다.") {
|
||||||
|
val paymentEntity = PaymentFixture.create(paymentKey = paymentKey)
|
||||||
|
|
||||||
|
every {
|
||||||
|
paymentRepository.findByPaymentKey(paymentKey)
|
||||||
|
} returns paymentEntity.also {
|
||||||
|
every {
|
||||||
|
paymentRepository.delete(it)
|
||||||
|
} just runs
|
||||||
|
}
|
||||||
|
|
||||||
|
every {
|
||||||
|
canceledPaymentRepository.save(any())
|
||||||
|
} returns PaymentFixture.createCanceled(
|
||||||
|
id = 1L,
|
||||||
|
paymentKey = paymentKey,
|
||||||
|
cancelAmount = paymentEntity.totalAmount,
|
||||||
|
)
|
||||||
|
|
||||||
|
val result: PaymentCancel.Request = paymentService.cancelPaymentByAdmin(reservationId)
|
||||||
|
|
||||||
|
assertSoftly(result) {
|
||||||
|
this.paymentKey shouldBe paymentKey
|
||||||
|
this.amount shouldBe paymentEntity.totalAmount
|
||||||
|
this.cancelReason shouldBe "고객 요청"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
context("updateCanceledTime") {
|
||||||
|
val paymentKey = "test-payment-key"
|
||||||
|
val canceledAt = OffsetDateTime.now()
|
||||||
|
|
||||||
|
test("paymentKey로 canceledPaymentEntity를 찾을 수 없으면 예외를 던진다.") {
|
||||||
|
every {
|
||||||
|
canceledPaymentRepository.findByPaymentKey(paymentKey)
|
||||||
|
} returns null
|
||||||
|
|
||||||
|
val exception = shouldThrow<RoomescapeException> {
|
||||||
|
paymentService.updateCanceledTime(paymentKey, canceledAt)
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSoftly(exception) {
|
||||||
|
this.errorType shouldBe ErrorType.PAYMENT_NOT_FOUND
|
||||||
|
this.httpStatus shouldBe HttpStatus.NOT_FOUND
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test("paymentKey로 canceledPaymentEntity를 찾고, canceledAt을 업데이트한다.") {
|
||||||
|
val canceledPaymentEntity = PaymentFixture.createCanceled(
|
||||||
|
paymentKey = paymentKey,
|
||||||
|
canceledAt = canceledAt.minusMinutes(1)
|
||||||
|
)
|
||||||
|
|
||||||
|
every {
|
||||||
|
canceledPaymentRepository.findByPaymentKey(paymentKey)
|
||||||
|
} returns canceledPaymentEntity
|
||||||
|
|
||||||
|
paymentService.updateCanceledTime(paymentKey, canceledAt)
|
||||||
|
|
||||||
|
assertSoftly(canceledPaymentEntity) {
|
||||||
|
this.canceledAt shouldBe canceledAt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user