feat(channel-donation-calculate): 채널 후원 정산 조회 기능을 추가한다

This commit is contained in:
2026-02-26 18:57:02 +09:00
parent dd9cd788ca
commit 19d3544c72
24 changed files with 1346 additions and 0 deletions
@@ -0,0 +1,43 @@
package kr.co.vividnext.sodalive.calculate.channelDonation
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
class ChannelDonationSettlementCalculatorTest {
@Test
@DisplayName("정산 공식에 따라 금액을 계산한다")
fun shouldCalculateSettlementAmountsWithExpectedFormula() {
val result = ChannelDonationSettlementCalculator.calculate(totalCan = 100)
assertEquals(10_000, result.krw)
assertEquals(660, result.fee)
assertEquals(7_939, result.settlementAmount)
assertEquals(262, result.withholdingTax)
assertEquals(7_677, result.depositAmount)
}
@Test
@DisplayName("소수 계산은 단계별 반올림 규칙을 따른다")
fun shouldRoundHalfUpOnDecimalResults() {
val result = ChannelDonationSettlementCalculator.calculate(totalCan = 1)
assertEquals(100, result.krw)
assertEquals(7, result.fee)
assertEquals(79, result.settlementAmount)
assertEquals(3, result.withholdingTax)
assertEquals(76, result.depositAmount)
}
@Test
@DisplayName("총 캔 수가 0이면 모든 금액은 0이다")
fun shouldReturnZeroWhenTotalCanIsZero() {
val result = ChannelDonationSettlementCalculator.calculate(totalCan = 0)
assertEquals(0, result.krw)
assertEquals(0, result.fee)
assertEquals(0, result.settlementAmount)
assertEquals(0, result.withholdingTax)
assertEquals(0, result.depositAmount)
}
}