generated from pricelees/issue-pr-template
test: PaymentServiceTest에 결제 수단별 테스트 추가
This commit is contained in:
parent
9fe576af11
commit
385f98fb21
@ -2,10 +2,11 @@ package com.sangdol.roomescape.payment
|
||||
|
||||
import com.ninjasquad.springmockk.MockkBean
|
||||
import com.sangdol.roomescape.payment.business.PaymentService
|
||||
import com.sangdol.roomescape.payment.business.domain.PaymentMethod
|
||||
import com.sangdol.roomescape.payment.business.domain.UserFacingPaymentErrorCode
|
||||
import com.sangdol.roomescape.payment.business.domain.*
|
||||
import com.sangdol.roomescape.payment.business.event.PaymentEvent
|
||||
import com.sangdol.roomescape.payment.business.event.PaymentEventListener
|
||||
import com.sangdol.roomescape.payment.dto.PaymentConfirmRequest
|
||||
import com.sangdol.roomescape.payment.dto.PaymentGatewayResponse
|
||||
import com.sangdol.roomescape.payment.exception.ExternalPaymentException
|
||||
import com.sangdol.roomescape.payment.exception.PaymentErrorCode
|
||||
import com.sangdol.roomescape.payment.exception.PaymentException
|
||||
@ -31,31 +32,67 @@ class PaymentServiceTest(
|
||||
context("결제를 승인한다.") {
|
||||
val request = PaymentFixture.confirmRequest
|
||||
|
||||
test("결제 정상 승인 및 이벤트 발행 확인") {
|
||||
val tosspayAPIResponse = PaymentFixture.confirmResponse(
|
||||
paymentKey = request.paymentKey,
|
||||
amount = request.amount,
|
||||
orderId = request.orderId,
|
||||
method = PaymentMethod.CARD
|
||||
)
|
||||
context("결제 정상 승인 및 이벤트 발행 확인") {
|
||||
test("간편결제 + 카드") {
|
||||
val tosspayAPIResponse = PaymentFixture.confirmResponse(
|
||||
paymentKey = request.paymentKey,
|
||||
amount = request.amount,
|
||||
orderId = request.orderId,
|
||||
method = PaymentMethod.EASY_PAY,
|
||||
cardDetail = PaymentFixture.cardDetail(100_000),
|
||||
easyPayDetail = PaymentFixture.easypayDetail(0)
|
||||
)
|
||||
|
||||
val paymentEventSlot = slot<PaymentEvent>()
|
||||
runSuccessTest(request, tosspayAPIResponse) {
|
||||
assertSoftly(it.detail) {
|
||||
this::class shouldBe EasypayCardPaymentDetail::class
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
every {
|
||||
tosspayClient.confirm(request.paymentKey, request.orderId, request.amount)
|
||||
} returns tosspayAPIResponse
|
||||
test("간편결제 - 충전식") {
|
||||
val tosspayAPIResponse = PaymentFixture.confirmResponse(
|
||||
paymentKey = request.paymentKey,
|
||||
amount = request.amount,
|
||||
orderId = request.orderId,
|
||||
method = PaymentMethod.EASY_PAY,
|
||||
)
|
||||
|
||||
every {
|
||||
paymentEventListener.handlePaymentEvent(capture(paymentEventSlot))
|
||||
} just runs
|
||||
runSuccessTest(request, tosspayAPIResponse) {
|
||||
assertSoftly(it.detail) {
|
||||
this::class shouldBe EasypayPrepaidPaymentDetail::class
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
paymentService.requestConfirm(12345L, request)
|
||||
test("카드") {
|
||||
val tosspayAPIResponse = PaymentFixture.confirmResponse(
|
||||
paymentKey = request.paymentKey,
|
||||
amount = request.amount,
|
||||
orderId = request.orderId,
|
||||
method = PaymentMethod.CARD,
|
||||
)
|
||||
|
||||
assertSoftly(paymentEventSlot.captured) {
|
||||
this.paymentKey shouldBe request.paymentKey
|
||||
this.orderId shouldBe request.orderId
|
||||
this.totalAmount shouldBe request.amount
|
||||
this.method shouldBe PaymentMethod.CARD
|
||||
runSuccessTest(request, tosspayAPIResponse) {
|
||||
assertSoftly(it.detail) {
|
||||
this::class shouldBe CardPaymentDetail::class
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test("계좌이체") {
|
||||
val tosspayAPIResponse = PaymentFixture.confirmResponse(
|
||||
paymentKey = request.paymentKey,
|
||||
amount = request.amount,
|
||||
orderId = request.orderId,
|
||||
method = PaymentMethod.TRANSFER,
|
||||
)
|
||||
|
||||
runSuccessTest(request, tosspayAPIResponse) {
|
||||
assertSoftly(it.detail) {
|
||||
this::class shouldBe BankTransferPaymentDetail::class
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,4 +159,27 @@ class PaymentServiceTest(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun runSuccessTest(request: PaymentConfirmRequest, tosspayAPIResponse: PaymentGatewayResponse, additionalAssertion: (PaymentEvent) -> Unit): PaymentEvent {
|
||||
val paymentEventSlot = slot<PaymentEvent>()
|
||||
|
||||
every {
|
||||
tosspayClient.confirm(request.paymentKey, request.orderId, request.amount)
|
||||
} returns tosspayAPIResponse
|
||||
|
||||
every {
|
||||
paymentEventListener.handlePaymentEvent(capture(paymentEventSlot))
|
||||
} just runs
|
||||
|
||||
paymentService.requestConfirm(12345L, request)
|
||||
|
||||
assertSoftly(paymentEventSlot.captured) {
|
||||
this.paymentKey shouldBe request.paymentKey
|
||||
this.orderId shouldBe request.orderId
|
||||
this.totalAmount shouldBe request.amount
|
||||
this.method shouldBe tosspayAPIResponse.method
|
||||
}
|
||||
|
||||
return paymentEventSlot.captured
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user