From 3269e04d3b74adf743cc49e265d159bed4dc4474 Mon Sep 17 00:00:00 2001 From: hwinkr Date: Thu, 10 Oct 2024 13:19:23 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=EB=8B=AC=EB=A0=A5=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EB=A5=BC=20=EC=83=9D=EC=84=B1=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EC=9C=A0=ED=8B=B8=20=ED=95=A8=EC=88=98=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 자바스크립트 Date 객체 동작을 확인하는 테스트 제거 - 오타 수정 - 윤년 테스트 추가 - 특정 날짜의 상태를 테스트하는 로직 개선 --- .../useCalendar/useCalendar.utils.test.ts | 62 ++++++++++++------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/frontend/src/hooks/useCalendar/useCalendar.utils.test.ts b/frontend/src/hooks/useCalendar/useCalendar.utils.test.ts index 6d4c1e0b0..c2bc16f0a 100644 --- a/frontend/src/hooks/useCalendar/useCalendar.utils.test.ts +++ b/frontend/src/hooks/useCalendar/useCalendar.utils.test.ts @@ -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); @@ -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); }); }); @@ -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', () => { @@ -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여야 한다.', () => { @@ -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'); + }); }); }); @@ -174,7 +188,7 @@ describe('Calendar utils', () => { }); }); - it('달력 데이터의 마지막 "current" 상태 이후의 모든 날짜는 "prev" 상태여야 한다.', () => { + it('달력 데이터의 마지막 "current" 상태 이후의 모든 날짜는 "next" 상태여야 한다.', () => { const reversedFlattenedCalendarDates = monthlyCalendarDate .flatMap((week) => week.value) .reverse();