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.ninjasquad.springmockk.MockkBean
|
||||||
import com.sangdol.roomescape.payment.business.PaymentService
|
import com.sangdol.roomescape.payment.business.PaymentService
|
||||||
import com.sangdol.roomescape.payment.business.domain.PaymentMethod
|
import com.sangdol.roomescape.payment.business.domain.*
|
||||||
import com.sangdol.roomescape.payment.business.domain.UserFacingPaymentErrorCode
|
|
||||||
import com.sangdol.roomescape.payment.business.event.PaymentEvent
|
import com.sangdol.roomescape.payment.business.event.PaymentEvent
|
||||||
import com.sangdol.roomescape.payment.business.event.PaymentEventListener
|
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.ExternalPaymentException
|
||||||
import com.sangdol.roomescape.payment.exception.PaymentErrorCode
|
import com.sangdol.roomescape.payment.exception.PaymentErrorCode
|
||||||
import com.sangdol.roomescape.payment.exception.PaymentException
|
import com.sangdol.roomescape.payment.exception.PaymentException
|
||||||
@ -31,31 +32,67 @@ class PaymentServiceTest(
|
|||||||
context("결제를 승인한다.") {
|
context("결제를 승인한다.") {
|
||||||
val request = PaymentFixture.confirmRequest
|
val request = PaymentFixture.confirmRequest
|
||||||
|
|
||||||
test("결제 정상 승인 및 이벤트 발행 확인") {
|
context("결제 정상 승인 및 이벤트 발행 확인") {
|
||||||
|
test("간편결제 + 카드") {
|
||||||
val tosspayAPIResponse = PaymentFixture.confirmResponse(
|
val tosspayAPIResponse = PaymentFixture.confirmResponse(
|
||||||
paymentKey = request.paymentKey,
|
paymentKey = request.paymentKey,
|
||||||
amount = request.amount,
|
amount = request.amount,
|
||||||
orderId = request.orderId,
|
orderId = request.orderId,
|
||||||
method = PaymentMethod.CARD
|
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 {
|
test("간편결제 - 충전식") {
|
||||||
tosspayClient.confirm(request.paymentKey, request.orderId, request.amount)
|
val tosspayAPIResponse = PaymentFixture.confirmResponse(
|
||||||
} returns tosspayAPIResponse
|
paymentKey = request.paymentKey,
|
||||||
|
amount = request.amount,
|
||||||
|
orderId = request.orderId,
|
||||||
|
method = PaymentMethod.EASY_PAY,
|
||||||
|
)
|
||||||
|
|
||||||
every {
|
runSuccessTest(request, tosspayAPIResponse) {
|
||||||
paymentEventListener.handlePaymentEvent(capture(paymentEventSlot))
|
assertSoftly(it.detail) {
|
||||||
} just runs
|
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) {
|
runSuccessTest(request, tosspayAPIResponse) {
|
||||||
this.paymentKey shouldBe request.paymentKey
|
assertSoftly(it.detail) {
|
||||||
this.orderId shouldBe request.orderId
|
this::class shouldBe CardPaymentDetail::class
|
||||||
this.totalAmount shouldBe request.amount
|
}
|
||||||
this.method shouldBe PaymentMethod.CARD
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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