8a0483cccc
- MoneyUtilTest (10): pct/tax/mul/div HALF_UP, null 안전성 - DateUtilTest (10): 정산월 범위, 윤년/평년, 월 차이/가산 - MaskUtilTest (7): NAME/PHONE/RRN/ACCOUNT/EMAIL 마스킹 규칙 - EncryptUtilTest (6): AES-256 round-trip, 한글, 짧은 키 패딩 - CommissionCalculatorTest (6): 모집/유지수수료 계산 공식, 폴백, agent 누락 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
93 lines
3.4 KiB
Java
93 lines
3.4 KiB
Java
package com.ga.common.util;
|
|
|
|
import org.junit.jupiter.api.DisplayName;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.time.LocalDate;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
|
|
class DateUtilTest {
|
|
|
|
@Test
|
|
@DisplayName("getMonthRange: 평월")
|
|
void monthRange_normal() {
|
|
String[] r = DateUtil.getMonthRange("202605");
|
|
assertThat(r).containsExactly("2026-05-01", "2026-05-31");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("getMonthRange: 윤년 2월")
|
|
void monthRange_leap() {
|
|
String[] r = DateUtil.getMonthRange("202402");
|
|
assertThat(r).containsExactly("2024-02-01", "2024-02-29");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("getMonthRange: 평년 2월")
|
|
void monthRange_normalFeb() {
|
|
String[] r = DateUtil.getMonthRange("202302");
|
|
assertThat(r).containsExactly("2023-02-01", "2023-02-28");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("calcMonthDiff: yyyymm 문자열")
|
|
void monthDiff_yyyymm() {
|
|
assertThat(DateUtil.calcMonthDiff("202401", "202405")).isEqualTo(4);
|
|
assertThat(DateUtil.calcMonthDiff("202312", "202401")).isEqualTo(1);
|
|
assertThat(DateUtil.calcMonthDiff("202405", "202401")).isEqualTo(-4);
|
|
assertThat(DateUtil.calcMonthDiff("202401", "202401")).isZero();
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("calcMonthDiff: LocalDate")
|
|
void monthDiff_date() {
|
|
// 같은 달의 다른 일자는 0개월
|
|
assertThat(DateUtil.calcMonthDiff(LocalDate.of(2024, 1, 1), LocalDate.of(2024, 1, 31))).isZero();
|
|
assertThat(DateUtil.calcMonthDiff(LocalDate.of(2024, 1, 31), LocalDate.of(2024, 2, 1))).isEqualTo(1);
|
|
assertThat(DateUtil.calcMonthDiff(LocalDate.of(2023, 1, 1), LocalDate.of(2024, 1, 1))).isEqualTo(12);
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("addMonth: 월 가산/연도 넘김")
|
|
void addMonth() {
|
|
assertThat(DateUtil.addMonth("202401", 3)).isEqualTo("202404");
|
|
assertThat(DateUtil.addMonth("202312", 1)).isEqualTo("202401");
|
|
assertThat(DateUtil.addMonth("202403", -3)).isEqualTo("202312");
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("parseDate: 패턴 일치/실패")
|
|
void parseDate() {
|
|
assertThat(DateUtil.parseDate("2026-05-10", "yyyy-MM-dd")).isEqualTo(LocalDate.of(2026, 5, 10));
|
|
assertThat(DateUtil.parseDate("20260510", "yyyyMMdd")).isEqualTo(LocalDate.of(2026, 5, 10));
|
|
assertThat(DateUtil.parseDate(null, "yyyy-MM-dd")).isNull();
|
|
assertThat(DateUtil.parseDate("", "yyyy-MM-dd")).isNull();
|
|
assertThat(DateUtil.parseDate("invalid", "yyyy-MM-dd")).isNull();
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("format: 패턴 적용")
|
|
void format() {
|
|
LocalDate d = LocalDate.of(2026, 5, 10);
|
|
assertThat(DateUtil.format(d, "yyyy-MM-dd")).isEqualTo("2026-05-10");
|
|
assertThat(DateUtil.format(d, "yyyyMMdd")).isEqualTo("20260510");
|
|
assertThat(DateUtil.format(null, "yyyy-MM-dd")).isNull();
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("getMonthRange: 잘못된 yyyymm 은 예외")
|
|
void monthRange_invalid() {
|
|
assertThatThrownBy(() -> DateUtil.getMonthRange("2026"))
|
|
.isInstanceOf(java.time.format.DateTimeParseException.class);
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("getSettleMonth(LocalDate): yyyyMM")
|
|
void settleMonthOfDate() {
|
|
assertThat(DateUtil.getSettleMonth(LocalDate.of(2026, 5, 10))).isEqualTo("202605");
|
|
assertThat(DateUtil.getSettleMonth(LocalDate.of(2024, 12, 31))).isEqualTo("202412");
|
|
}
|
|
}
|