fix(calculate): 콘텐츠별 정산 요율을 정산 조회에 우선 반영한다

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-07 13:38:27 +09:00
parent 9e6326f08a
commit 3eda0abcfc
3 changed files with 149 additions and 12 deletions

View File

@@ -0,0 +1,102 @@
package kr.co.vividnext.sodalive.admin.calculate
import kr.co.vividnext.sodalive.content.order.OrderType
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
class ContentSettlementCalculationTest {
@Test
@DisplayName("콘텐츠 정산 응답은 콘텐츠별 정산 요율을 우선 적용한다")
fun shouldApplyExplicitSettlementRatioForCalculateContentResponse() {
val result = GetCalculateContentQueryData(
nickname = "creator",
title = "content",
registrationDate = "2026-04-07",
saleDate = "2026-04-07",
orderType = OrderType.KEEP,
orderPrice = 100,
numberOfPeople = 2,
totalCan = 100,
totalPoint = 0,
settlementRatio = 80
).toGetCalculateContentResponse()
assertEquals("소장", result.orderType)
assertEquals(10_000, result.totalKrw)
assertEquals(660, result.paymentFee)
assertEquals(7_472, result.settlementAmount)
assertEquals(247, result.tax)
assertEquals(7_225, result.depositAmount)
}
@Test
@DisplayName("콘텐츠 정산 응답은 정산 요율이 없으면 70퍼센트 기본값으로 계산한다")
fun shouldFallbackToDefaultSettlementRatioForCalculateContentResponse() {
val result = GetCalculateContentQueryData(
nickname = "creator",
title = "content",
registrationDate = "2026-04-07",
saleDate = "2026-04-07",
orderType = OrderType.RENTAL,
orderPrice = 70,
numberOfPeople = 1,
totalCan = 100,
totalPoint = 0,
settlementRatio = null
).toGetCalculateContentResponse()
assertEquals("대여", result.orderType)
assertEquals(10_000, result.totalKrw)
assertEquals(660, result.paymentFee)
assertEquals(6_538, result.settlementAmount)
assertEquals(216, result.tax)
assertEquals(6_322, result.depositAmount)
}
@Test
@DisplayName("누적 콘텐츠 정산 응답은 콘텐츠별 정산 요율을 우선 적용한다")
fun shouldApplyExplicitSettlementRatioForCumulativeSalesResponse() {
val result = GetCumulativeSalesByContentQueryData(
nickname = "creator",
title = "content",
registrationDate = "2026-04-07",
orderType = OrderType.KEEP,
orderPrice = 100,
numberOfPeople = 2,
totalCan = 100,
totalPoint = 0,
settlementRatio = 80
).toCumulativeSalesByContentItem()
assertEquals("소장", result.orderType)
assertEquals(10_000, result.totalKrw)
assertEquals(660, result.paymentFee)
assertEquals(7_472, result.settlementAmount)
assertEquals(247, result.tax)
assertEquals(7_225, result.depositAmount)
}
@Test
@DisplayName("누적 콘텐츠 정산 응답은 정산 요율이 없으면 70퍼센트 기본값으로 계산한다")
fun shouldFallbackToDefaultSettlementRatioForCumulativeSalesResponse() {
val result = GetCumulativeSalesByContentQueryData(
nickname = "creator",
title = "content",
registrationDate = "2026-04-07",
orderType = OrderType.RENTAL,
orderPrice = 70,
numberOfPeople = 1,
totalCan = 100,
totalPoint = 0,
settlementRatio = null
).toCumulativeSalesByContentItem()
assertEquals("대여", result.orderType)
assertEquals(10_000, result.totalKrw)
assertEquals(660, result.paymentFee)
assertEquals(6_538, result.settlementAmount)
assertEquals(216, result.tax)
assertEquals(6_322, result.depositAmount)
}
}