Files
ga-commission-system/ga-common/src/test/java/com/ga/common/util/DateUtilTest.java
T

93 lines
3.4 KiB
Java
Raw Normal View History

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");
}
}