feat(charge): 결제 완료 응답에 충전 ID를 추가한다

This commit is contained in:
2026-11-03 15:50:39 +09:00
parent e479f1d816
commit a6a4e9069b
3 changed files with 18 additions and 7 deletions
@@ -130,7 +130,7 @@ class ChargeControllerIntegrationTest @Autowired constructor(
@ParameterizedTest
@EnumSource(VerificationPath::class)
@DisplayName("다섯 완료 HTTP 경로는 실제 서비스 결과의 네 필드와 기존 envelope를 반환한다")
@DisplayName("다섯 완료 HTTP 경로는 저장된 충전 ID와 완료 정보 및 기존 envelope를 반환한다")
fun shouldReturnChargeCompleteDataForAllFiveVerificationEndpoints(path: VerificationPath) {
val owner = createMember(container = if (path.isIap) "web" else "ios")
val chargeId = if (path == VerificationPath.GOOGLE) {
@@ -143,10 +143,10 @@ class ChargeControllerIntegrationTest @Autowired constructor(
val data = successData(post(path.path, verificationRequest(path, chargeId ?: 0), token(owner)))
assertCompletion(data, first = true, iap = path.isIap)
val expectedChargeId = chargeId ?: transactionTemplate.execute { chargeRepository.findAll().single().id!! }!!
assertCompletion(data, chargeId = expectedChargeId, first = true, iap = path.isIap)
if (chargeId == null) {
val createdId = transactionTemplate.execute { chargeRepository.findAll().single().id!! }!!
assertCompleted(createdId, owner.id!!, PaymentGateway.GOOGLE_IAP, listOf(0, 0, 100, 0, 0, 0))
assertCompleted(expectedChargeId, owner.id!!, PaymentGateway.GOOGLE_IAP, listOf(0, 0, 100, 0, 0, 0))
Mockito.verify(googlePlayService).verifyAndConsumePurchase("http-purchase", "http-product")
Mockito.verifyNoInteractions(bootpay, okHttpClient)
} else {
@@ -170,6 +170,7 @@ class ChargeControllerIntegrationTest @Autowired constructor(
repeat(2) {
assertCompletion(
successData(post(path.path, verificationRequest(path, chargeId), bearer)),
chargeId = chargeId,
first = expected,
iap = path.isIap
)
@@ -191,10 +192,11 @@ class ChargeControllerIntegrationTest @Autowired constructor(
val legacyBefore = storedState(legacyId, owner.id!!)
allowGooglePurchase()
assertCompletion(successData(post("/charge/google", googleRequest(), token(owner))), first = false, iap = true)
val data = successData(post("/charge/google", googleRequest(), token(owner)))
transactionTemplate.executeWithoutResult {
val created = chargeRepository.findAll().single { it.id != legacyId }
assertCompletion(data, chargeId = created.id!!, first = false, iap = true)
assertEquals(false, created.isFirstCharged)
assertEquals(PaymentStatus.COMPLETE, created.payment!!.status)
assertEquals("http-google-order", created.payment!!.orderId)
@@ -265,6 +267,7 @@ class ChargeControllerIntegrationTest @Autowired constructor(
val chargeId = createCharge(owner, PaymentGateway.PG, first = true)
assertCompletion(
successData(post("/charge/verify", VerifyRequest("http-receipt", "$chargeId"), token(owner))),
chargeId = chargeId,
first = true,
iap = false
)
@@ -352,6 +355,7 @@ class ChargeControllerIntegrationTest @Autowired constructor(
val completed = storedState(chargeId, owner.id!!)
assertCompletion(
successData(post("/charge/payverse/verify", PayverseVerifyRequest("http-tid", "$chargeId"), token(owner))),
chargeId = chargeId,
first = true,
iap = false
)
@@ -453,8 +457,13 @@ class ChargeControllerIntegrationTest @Autowired constructor(
return body["data"]
}
private fun assertCompletion(data: JsonNode, first: Boolean, iap: Boolean) {
assertEquals(setOf("price", "currencyCode", "isFirstCharged", "isIap"), data.fieldNames().asSequence().toSet())
private fun assertCompletion(data: JsonNode, chargeId: Long, first: Boolean, iap: Boolean) {
assertEquals(
setOf("chargeId", "price", "currencyCode", "isFirstCharged", "isIap"),
data.fieldNames().asSequence().toSet()
)
assertEquals(true, data["chargeId"].isIntegralNumber)
assertEquals(chargeId, data["chargeId"].longValue())
assertEquals(true, data["price"].isNumber)
assertEquals(0, BigDecimal("9.99").compareTo(data["price"].decimalValue()))
assertEquals("USD", data["currencyCode"].textValue())