-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c7f9169
commit bb70178
Showing
5 changed files
with
253 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
import { calculateDeadlineTime } from '@utils/post/calculateDeadlineTime'; | ||
|
||
describe('calculateDeadlineTime 함수를 이용해서 시작시간과 마감시간으로 몇일, 몇시간, 몇분을 설정했는지 구한다.', () => { | ||
test('시작 시간: 2023-07-12 12:40, 마감 시간: 2023-07-13 12:40 일 때 하루를 반환한다.', () => { | ||
const createdAt = '2023-07-12 12:40'; | ||
const deadline = '2023-07-13 12:40'; | ||
|
||
const result = calculateDeadlineTime(createdAt, deadline); | ||
|
||
expect(result).toEqual({ | ||
day: 1, | ||
hour: 0, | ||
minute: 0, | ||
}); | ||
}); | ||
|
||
test('시작 시간: 2023-07-12 12:40, 마감 시간: 2023-07-13 18:40 일 때 1일 6시간을 반환한다.', () => { | ||
const createdAt = '2023-07-12 12:40'; | ||
const deadline = '2023-07-13 18:40'; | ||
|
||
const result = calculateDeadlineTime(createdAt, deadline); | ||
|
||
expect(result).toEqual({ | ||
day: 1, | ||
hour: 6, | ||
minute: 0, | ||
}); | ||
}); | ||
|
||
test('시작 시간: 2023-07-12 12:40, 마감 시간: 2023-07-13 18:20 일 때 1일 5시간 40분을 반환한다.', () => { | ||
const createdAt = '2023-07-12 12:40'; | ||
const deadline = '2023-07-13 18:20'; | ||
|
||
const result = calculateDeadlineTime(createdAt, deadline); | ||
|
||
expect(result).toEqual({ | ||
day: 1, | ||
hour: 5, | ||
minute: 40, | ||
}); | ||
}); | ||
|
||
test('시작 시간: 2023-07-12 12:40, 마감 시간: 2023-07-12 12:50 일 때 10분을 반환한다.', () => { | ||
const createdAt = '2023-07-12 12:40'; | ||
const deadline = '2023-07-12 12:50'; | ||
|
||
const result = calculateDeadlineTime(createdAt, deadline); | ||
|
||
expect(result).toEqual({ | ||
day: 0, | ||
hour: 0, | ||
minute: 10, | ||
}); | ||
}); | ||
|
||
test('시작 시간: 2023-07-12 00:00, 마감 시간: 2023-07-14 23:59 일 때 2일 23시간 59분을 반환한다.', () => { | ||
const createdAt = '2023-07-12 00:00'; | ||
const deadline = '2023-07-14 23:59'; | ||
|
||
const result = calculateDeadlineTime(createdAt, deadline); | ||
|
||
expect(result).toEqual({ | ||
day: 2, | ||
hour: 23, | ||
minute: 59, | ||
}); | ||
}); | ||
|
||
test('시작 시간이 undefined, 마감 시간: 2023-07-14 23:59 일 때 0일 0시간 0분을 반환한다.', () => { | ||
const createdAt = undefined; | ||
const deadline = '2023-07-14 23:59'; | ||
|
||
const result = calculateDeadlineTime(createdAt, deadline); | ||
|
||
expect(result).toEqual({ | ||
day: 0, | ||
hour: 0, | ||
minute: 0, | ||
}); | ||
}); | ||
|
||
test('시작 시간이 2023-07-14 23:59, 마감 시간: undefined 일 때 0일 0시간 0분을 반환한다.', () => { | ||
const createdAt = '2023-07-14 23:59'; | ||
const deadline = undefined; | ||
|
||
const result = calculateDeadlineTime(createdAt, deadline); | ||
|
||
expect(result).toEqual({ | ||
day: 0, | ||
hour: 0, | ||
minute: 0, | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
import { getSelectedTimeOption } from '@utils/post/getSelectedTimeOption'; | ||
|
||
describe('getSelectedTimeOption 함수에서 day, hour, minute 객체를 입력받아 "10분" | "30분" | "1시간" | "6시간" | "1일" | "사용자 지정" | null 을 반환한다.', () => { | ||
test('10분 객체를 입력했을 때 10분을 반환한다.', () => { | ||
const time = { | ||
day: 0, | ||
hour: 0, | ||
minute: 10, | ||
}; | ||
|
||
const result = getSelectedTimeOption(time); | ||
|
||
expect(result).toBe('10분'); | ||
}); | ||
|
||
test('30분 객체를 입력했을 때 30분을 반환한다.', () => { | ||
const time = { | ||
day: 0, | ||
hour: 0, | ||
minute: 30, | ||
}; | ||
|
||
const result = getSelectedTimeOption(time); | ||
|
||
expect(result).toBe('30분'); | ||
}); | ||
|
||
test('1시간 객체를 입력했을 때 1시간을 반환한다.', () => { | ||
const time = { | ||
day: 0, | ||
hour: 1, | ||
minute: 0, | ||
}; | ||
|
||
const result = getSelectedTimeOption(time); | ||
|
||
expect(result).toBe('1시간'); | ||
}); | ||
|
||
test('6시간 객체를 입력했을 때 6시간을 반환한다.', () => { | ||
const time = { | ||
day: 0, | ||
hour: 6, | ||
minute: 0, | ||
}; | ||
|
||
const result = getSelectedTimeOption(time); | ||
|
||
expect(result).toBe('6시간'); | ||
}); | ||
|
||
test('1일 객체를 입력했을 때 1일을 반환한다.', () => { | ||
const time = { | ||
day: 1, | ||
hour: 0, | ||
minute: 0, | ||
}; | ||
|
||
const result = getSelectedTimeOption(time); | ||
|
||
expect(result).toBe('1일'); | ||
}); | ||
|
||
test('2일 객체를 입력했을 때 사용자지정을 반환한다.', () => { | ||
const time = { | ||
day: 2, | ||
hour: 0, | ||
minute: 0, | ||
}; | ||
|
||
const result = getSelectedTimeOption(time); | ||
|
||
expect(result).toBe('사용자지정'); | ||
}); | ||
|
||
test('3분 객체를 입력했을 때 사용자지정을 반환한다.', () => { | ||
const time = { | ||
day: 0, | ||
hour: 0, | ||
minute: 3, | ||
}; | ||
|
||
const result = getSelectedTimeOption(time); | ||
|
||
expect(result).toBe('사용자지정'); | ||
}); | ||
|
||
test('0일 0시간 0분 객체를 입력했을 때 null을 반환한다.', () => { | ||
const time = { | ||
day: 0, | ||
hour: 0, | ||
minute: 0, | ||
}; | ||
|
||
const result = getSelectedTimeOption(time); | ||
|
||
expect(result).toBe(null); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
export const calculateDeadlineTime = (createdAt?: string, deadLine?: string) => { | ||
if (!createdAt || !deadLine) { | ||
return { | ||
day: 0, | ||
hour: 0, | ||
minute: 0, | ||
}; | ||
} | ||
|
||
const createTimeNumber = new Date(createdAt); | ||
|
||
const deadlineTimeNumber = new Date(deadLine); | ||
|
||
const timeDifference = Number(deadlineTimeNumber) - Number(createTimeNumber); | ||
|
||
const minuteUnit = 60_000; | ||
const hourUnit = minuteUnit * 60; | ||
const dayUnit = hourUnit * 24; | ||
|
||
const hourTimeInMilliseconds = timeDifference % dayUnit; | ||
const minuteTimeInMilliseconds = hourTimeInMilliseconds % hourUnit; | ||
|
||
const day = Math.floor(timeDifference / dayUnit); | ||
const hour = Math.floor(hourTimeInMilliseconds / hourUnit); | ||
const minute = Math.floor(minuteTimeInMilliseconds / minuteUnit); | ||
|
||
return { | ||
day, | ||
hour, | ||
minute, | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import { DeadlineOption } from '@components/PostForm/constants'; | ||
|
||
export const getSelectedTimeOption = ({ | ||
day, | ||
hour, | ||
minute, | ||
}: { | ||
day: number; | ||
hour: number; | ||
minute: number; | ||
}): DeadlineOption | '사용자지정' | null => { | ||
if (day === 0 && hour === 0 && minute === 0) return null; | ||
if (day === 0 && hour === 0 && minute === 10) return '10분'; | ||
if (day === 0 && hour === 0 && minute === 30) return '30분'; | ||
if (day === 0 && hour === 1 && minute === 0) return '1시간'; | ||
if (day === 0 && hour === 6 && minute === 0) return '6시간'; | ||
if (day === 1 && hour === 0 && minute === 0) return '1일'; | ||
|
||
return '사용자지정'; | ||
}; |