[공통] util → framework 유틸 (ACM-CM-002)

This commit is contained in:
forge-bot 2026-07-18 11:03:16 +00:00
parent 9f25c6689f
commit 3bb79c8477

View file

@ -0,0 +1,221 @@
package com.klaro.acquirecore.framework.util;
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import java.math.RoundingMode;
import static org.junit.jupiter.api.Assertions.*;
class AmountUtilTest {
@Test
void of_withStringValue_returnsBigDecimal() {
BigDecimal result = AmountUtil.of("1234.56");
assertEquals(new BigDecimal("1234.56"), result);
}
@Test
void of_withLongValue_returnsBigDecimal() {
BigDecimal result = AmountUtil.of(1000L);
assertEquals(new BigDecimal("1000"), result);
}
@Test
void of_withDoubleValue_returnsBigDecimal() {
BigDecimal result = AmountUtil.of(1234.56);
assertEquals(new BigDecimal("1234.56"), result);
}
@Test
void add_addsTwoValues() {
BigDecimal a = new BigDecimal("100.50");
BigDecimal b = new BigDecimal("50.25");
BigDecimal result = AmountUtil.add(a, b);
assertEquals(new BigDecimal("150.75"), result);
}
@Test
void subtract_subtractsValues() {
BigDecimal a = new BigDecimal("100.50");
BigDecimal b = new BigDecimal("50.25");
BigDecimal result = AmountUtil.subtract(a, b);
assertEquals(new BigDecimal("50.25"), result);
}
@Test
void multiply_multipliesValues() {
BigDecimal a = new BigDecimal("10.00");
BigDecimal b = new BigDecimal("5.00");
BigDecimal result = AmountUtil.multiply(a, b);
assertEquals(new BigDecimal("50.00"), result);
}
@Test
void divide_dividesValues() {
BigDecimal dividend = new BigDecimal("100.00");
BigDecimal divisor = new BigDecimal("4.00");
BigDecimal result = AmountUtil.divide(dividend, divisor);
assertEquals(new BigDecimal("25.00"), result);
}
@Test
void divide_byZero_throwsException() {
BigDecimal dividend = new BigDecimal("100.00");
BigDecimal divisor = BigDecimal.ZERO;
assertThrows(ArithmeticException.class, () -> AmountUtil.divide(dividend, divisor));
}
@Test
void round_roundsToDefaultScale() {
BigDecimal value = new BigDecimal("123.456");
BigDecimal result = AmountUtil.round(value);
assertEquals(new BigDecimal("123.46"), result);
}
@Test
void round_roundsWithCustomScaleAndRoundingMode() {
BigDecimal value = new BigDecimal("123.456");
BigDecimal result = AmountUtil.round(value, 3, RoundingMode.HALF_UP);
assertEquals(new BigDecimal("123.456"), result);
}
@Test
void percentage_calculatesCorrectPercentage() {
BigDecimal value = new BigDecimal("1000.00");
BigDecimal percentage = new BigDecimal("10");
BigDecimal result = AmountUtil.percentage(value, percentage);
assertEquals(new BigDecimal("100.00"), result);
}
@Test
void addPercentage_addsPercentageToValue() {
BigDecimal value = new BigDecimal("1000.00");
BigDecimal percentage = new BigDecimal("10");
BigDecimal result = AmountUtil.addPercentage(value, percentage);
assertEquals(new BigDecimal("1100.00"), result);
}
@Test
void subtractPercentage_subtractsPercentageFromValue() {
BigDecimal value = new BigDecimal("1000.00");
BigDecimal percentage = new BigDecimal("10");
BigDecimal result = AmountUtil.subtractPercentage(value, percentage);
assertEquals(new BigDecimal("900.00"), result);
}
@Test
void formatKoreanWon_formatsCorrectly() {
BigDecimal amount = new BigDecimal("1234567");
String result = AmountUtil.formatKoreanWon(amount);
assertEquals("₩1,234,567", result);
}
@Test
void formatCurrency_formatsWithTwoDecimals() {
BigDecimal amount = new BigDecimal("1234.5");
String result = AmountUtil.formatCurrency(amount);
assertEquals("1,234.50", result);
}
@Test
void compare_comparesValues() {
BigDecimal a = new BigDecimal("100.00");
BigDecimal b = new BigDecimal("200.00");
assertEquals(-1, AmountUtil.compare(a, b));
assertEquals(1, AmountUtil.compare(b, a));
assertEquals(0, AmountUtil.compare(a, new BigDecimal("100.00")));
}
@Test
void isGreaterThan_returnsCorrectResult() {
BigDecimal a = new BigDecimal("200.00");
BigDecimal b = new BigDecimal("100.00");
assertTrue(AmountUtil.isGreaterThan(a, b));
assertFalse(AmountUtil.isGreaterThan(b, a));
}
@Test
void isLessThan_returnsCorrectResult() {
BigDecimal a = new BigDecimal("100.00");
BigDecimal b = new BigDecimal("200.00");
assertTrue(AmountUtil.isLessThan(a, b));
assertFalse(AmountUtil.isLessThan(b, a));
}
@Test
void isZero_withZeroValue_returnsTrue() {
assertTrue(AmountUtil.isZero(BigDecimal.ZERO));
}
@Test
void isPositive_withPositiveValue_returnsTrue() {
assertTrue(AmountUtil.isPositive(new BigDecimal("1.00")));
}
@Test
void isNegative_withNegativeValue_returnsTrue() {
assertTrue(AmountUtil.isNegative(new BigDecimal("-1.00")));
}
@Test
void abs_returnsAbsoluteValue() {
BigDecimal value = new BigDecimal("-100.00");
BigDecimal result = AmountUtil.abs(value);
assertEquals(new BigDecimal("100.00"), result);
}
@Test
void negate_negatesValue() {
BigDecimal value = new BigDecimal("100.00");
BigDecimal result = AmountUtil.negate(value);
assertEquals(new BigDecimal("-100.00"), result);
}
@Test
void max_returnsMaximumValue() {
BigDecimal a = new BigDecimal("100.00");
BigDecimal b = new BigDecimal("200.00");
BigDecimal result = AmountUtil.max(a, b);
assertEquals(new BigDecimal("200.00"), result);
}
@Test
void min_returnsMinimumValue() {
BigDecimal a = new BigDecimal("100.00");
BigDecimal b = new BigDecimal("200.00");
BigDecimal result = AmountUtil.min(a, b);
assertEquals(new BigDecimal("100.00"), result);
}
@Test
void parseAmount_withCurrencySymbol_parsesCorrectly() {
BigDecimal result = AmountUtil.parseAmount("₩1,000,000");
assertEquals(new BigDecimal("1000000"), result);
}
@Test
void isValidAmount_withValidAmount_returnsTrue() {
assertTrue(AmountUtil.isValidAmount("₩1,000,000"));
assertTrue(AmountUtil.isValidAmount("1000.50"));
}
@Test
void isValidAmount_withInvalidAmount_returnsFalse() {
assertFalse(AmountUtil.isValidAmount("invalid"));
assertFalse(AmountUtil.isValidAmount(null));
}
@Test
void fromCents_convertsToDecimal() {
BigDecimal result = AmountUtil.fromCents(123456);
assertEquals(new BigDecimal("1234.56"), result);
}
@Test
void toCents_convertsToCents() {
BigDecimal amount = new BigDecimal("1234.56");
long result = AmountUtil.toCents(amount);
assertEquals(123456, result);
}
}