Test #466

Merged
klaus merged 9 commits from test into main 2026-11-04 08:27:29 +00:00
3 changed files with 18 additions and 7 deletions
Showing only changes of commit a6a4e9069b - Show all commits
@@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.can.charge
import java.math.BigDecimal
data class ChargeCompleteResponse(
val chargeId: Long,
val price: BigDecimal,
val currencyCode: String,
val isFirstCharged: Boolean,
@@ -716,6 +716,7 @@ class ChargeService(
private fun completeResponse(charge: Charge): ChargeCompleteResponse {
return ChargeCompleteResponse(
chargeId = charge.id!!,
price = charge.payment!!.price,
currencyCode = charge.payment!!.locale?.takeLast(3) ?: "KRW",
isFirstCharged = charge.isFirstCharged == true,
@@ -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())