Skip to content

Commit

Permalink
test: 달력 데이터를 생성하는 유틸 함수 테스트 개선
Browse files Browse the repository at this point in the history
- 자바스크립트 Date 객체 동작을 확인하는 테스트 제거
- 오타 수정
- 윤년 테스트 추가
- 특정 날짜의 상태를 테스트하는 로직 개선
  • Loading branch information
hwinkr committed Oct 10, 2024
1 parent e1fd82a commit 3269e04
Showing 1 changed file with 38 additions and 24 deletions.
62 changes: 38 additions & 24 deletions frontend/src/hooks/useCalendar/useCalendar.utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,6 @@ describe('Calendar utils', () => {
const testDate = new Date(TEST_YEAR, TEST_MONTH, TEST_DATE);

describe('Calendar Base util functions test', () => {
it('getYear 함수는 올바른 년도를 반환한다.', () => {
const year = getYear(testDate);
expect(year).toBe(TEST_YEAR);
});

it('getMonth 함수는 현재 달에서 1을 뺀 값을 반환한다.', () => {
const month = getMonth(testDate);
expect(month).toBe(TEST_MONTH);
Expand All @@ -36,21 +31,15 @@ describe('Calendar utils', () => {
expect(day).toBe(TUESDAY_INDEX);
});

it('getDate 함수는 오늘 날짜를 반환한다.', () => {
const date = getDate(testDate);
expect(date).toBe(TEST_DATE);
});

it('getFullDate 함수는 오늘 날짜 정보를 문자열로 반환한다.', () => {
const fullDate = getFullDate(testDate);
expect(fullDate).toBe(TEST_FULL_DATE);
});
});

describe('serFirstDate', () => {
describe('setFirstDate', () => {
it('날짜 객체를 해당 달의 첫 번째 날짜로 변경한다.', () => {
const result = setFirstDate(testDate);
expect(getDate(result)).not.toBe(TEST_DATE);
expect(getDate(result)).toBe(1);
});
});
Expand All @@ -69,6 +58,24 @@ describe('Calendar utils', () => {
const dayInTestDate = getDaysInMonth(testDate);
expect(dayInTestDate).toBe(EXPECTED_DAYS_IN_MONTH);
});

const LEAP_YEAR = 2020;
const FEBRUARY_INDEX = 1;
const DATE = 1;

it('윤년인 경우 2월의 총 일수를 계산해서 반환한다. (29일)', () => {
const testDate = new Date(LEAP_YEAR, FEBRUARY_INDEX, DATE);
const EXPECTED_DAYS_IN_FEBRUARY = 29;
const dayInTestDate = getDaysInMonth(testDate);
expect(dayInTestDate).toBe(EXPECTED_DAYS_IN_FEBRUARY);
});

it('평년인 경우 2월의 총 일수를 계산해서 반환한다. (28일)', () => {
const testDate = new Date(LEAP_YEAR + 1, FEBRUARY_INDEX, DATE); // 2021년은 평년
const EXPECTED_DAYS_IN_FEBRUARY = 28;
const dayInTestDate = getDaysInMonth(testDate);
expect(dayInTestDate).toBe(EXPECTED_DAYS_IN_FEBRUARY);
});
});

describe('getCalendarStartDate', () => {
Expand All @@ -89,11 +96,13 @@ describe('Calendar utils', () => {
const calendarStartDate = getCalendarStartDate(testDate);

const firstWeeklyDate = getWeeklyDate(calendarStartDate, getMonth(testDate));
const { status } =
firstWeeklyDate.find(({ value }) => getMonth(value) === getMonth(testDate) - 1) ?? {};
const prevStatusDates = firstWeeklyDate
.filter(({ value }) => getMonth(value) === getMonth(testDate) - 1)
.map(({ status }) => status);

expect(firstWeeklyDate).toHaveLength(CALENDAR_PROPERTIES.daysInOneWeek);
expect(status).toBe('prev');
prevStatusDates.forEach((status) => {
expect(status).toBe('prev');
});
});

it('한 주 데이터에 다음 달이 포함되어 있으면, 해당 날짜의 상태는 next여야 한다.', () => {
Expand All @@ -104,21 +113,26 @@ describe('Calendar utils', () => {
);

const lastWeeklyDate = getWeeklyDate(calendarStartDate, getMonth(testDate));
const { status } =
lastWeeklyDate.find(({ value }) => getMonth(value) === getMonth(testDate) + 1) ?? {};
const nextStatusDates = lastWeeklyDate
.filter(({ value }) => getMonth(value) === getMonth(testDate) - 1)
.map(({ status }) => status);

expect(lastWeeklyDate).toHaveLength(CALENDAR_PROPERTIES.daysInOneWeek);
expect(status).toBe('next');
nextStatusDates.forEach((status) => {
expect(status).toBe('next');
});
});

it('한 주 데이터에 현재 달이 포함되어 있으면, 해당 날짜의 상태는 current여야 한다.', () => {
const calendarStartDate = getCalendarStartDate(testDate);
const firstWeeklyDate = getWeeklyDate(calendarStartDate, getMonth(testDate));

const { status } =
firstWeeklyDate.find(({ value }) => getMonth(value) === getMonth(testDate)) ?? {};
const currentStatusDates = firstWeeklyDate
.filter(({ value }) => getMonth(value) === getMonth(testDate))
.map(({ status }) => status);

expect(status).toBe('current');
currentStatusDates.forEach((status) => {
expect(status).toBe('current');
});
});
});

Expand Down Expand Up @@ -174,7 +188,7 @@ describe('Calendar utils', () => {
});
});

it('달력 데이터의 마지막 "current" 상태 이후의 모든 날짜는 "prev" 상태여야 한다.', () => {
it('달력 데이터의 마지막 "current" 상태 이후의 모든 날짜는 "next" 상태여야 한다.', () => {
const reversedFlattenedCalendarDates = monthlyCalendarDate
.flatMap((week) => week.value)
.reverse();
Expand Down

0 comments on commit 3269e04

Please sign in to comment.