mirror of https://github.com/allinssl/allinssl
124 lines
4.2 KiB
TypeScript
124 lines
4.2 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
|
|
import * as dateUtils from '../src/date'
|
|
|
|
describe('日期处理工具函数测试', () => {
|
|
describe('formatDate', () => {
|
|
it('应当正确格式化日期字符串', () => {
|
|
const date = new Date('2024-02-27 14:30:45')
|
|
expect(dateUtils.formatDate(date)).toBe('2024-02-27 14:30:45')
|
|
expect(dateUtils.formatDate(date, 'YYYY-MM-DD')).toBe('2024-02-27')
|
|
expect(dateUtils.formatDate(date, 'HH:mm:ss')).toBe('14:30:45')
|
|
})
|
|
|
|
it('应当正确处理单位数的月日时分秒', () => {
|
|
const date = new Date('2024-01-05 09:05:08')
|
|
expect(dateUtils.formatDate(date)).toBe('2024-01-05 09:05:08')
|
|
})
|
|
})
|
|
|
|
describe('getDaysDiff', () => {
|
|
it('应当正确计算两个日期之间的天数差', () => {
|
|
const start = new Date('2024-02-27')
|
|
const end = new Date('2024-03-01')
|
|
expect(dateUtils.getDaysDiff(start, end)).toBe(3)
|
|
})
|
|
|
|
it('应当正确处理同一天的情况', () => {
|
|
const date = new Date('2024-02-27')
|
|
expect(dateUtils.getDaysDiff(date, date)).toBe(0)
|
|
})
|
|
})
|
|
|
|
describe('isDateInRange', () => {
|
|
it('应当正确判断日期是否在范围内', () => {
|
|
const start = new Date('2024-02-01')
|
|
const end = new Date('2024-02-29')
|
|
const date = new Date('2024-02-15')
|
|
expect(dateUtils.isDateInRange(date, start, end)).toBe(true)
|
|
})
|
|
|
|
it('应当正确处理边界情况', () => {
|
|
const start = new Date('2024-02-01')
|
|
const end = new Date('2024-02-29')
|
|
expect(dateUtils.isDateInRange(start, start, end)).toBe(true)
|
|
expect(dateUtils.isDateInRange(end, start, end)).toBe(true)
|
|
})
|
|
|
|
it('应当正确处理范围外的情况', () => {
|
|
const start = new Date('2024-02-01')
|
|
const end = new Date('2024-02-29')
|
|
const before = new Date('2024-01-31')
|
|
const after = new Date('2024-03-01')
|
|
expect(dateUtils.isDateInRange(before, start, end)).toBe(false)
|
|
expect(dateUtils.isDateInRange(after, start, end)).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('getStartOfDay和getEndOfDay', () => {
|
|
it('应当正确获取一天的开始时间', () => {
|
|
const date = new Date('2024-02-27 14:30:45')
|
|
const start = dateUtils.getStartOfDay(date)
|
|
expect(start.getHours()).toBe(0)
|
|
expect(start.getMinutes()).toBe(0)
|
|
expect(start.getSeconds()).toBe(0)
|
|
})
|
|
|
|
it('应当正确获取一天的结束时间', () => {
|
|
const date = new Date('2024-02-27 14:30:45')
|
|
const end = dateUtils.getEndOfDay(date)
|
|
expect(end.getHours()).toBe(23)
|
|
expect(end.getMinutes()).toBe(59)
|
|
expect(end.getSeconds()).toBe(59)
|
|
})
|
|
})
|
|
|
|
describe('addDays', () => {
|
|
it('应当正确添加天数', () => {
|
|
const date = new Date('2024-02-27')
|
|
expect(dateUtils.addDays(1, date).toDateString()).toBe(new Date('2024-02-28').toDateString())
|
|
expect(dateUtils.addDays(-1, date).toDateString()).toBe(new Date('2024-02-26').toDateString())
|
|
})
|
|
})
|
|
|
|
describe('formatRelativeTime', () => {
|
|
beforeEach(() => {
|
|
// 固定当前时间为2024-02-27 14:30:00
|
|
vi.useFakeTimers()
|
|
vi.setSystemTime(new Date('2024-02-27 14:30:00'))
|
|
})
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers()
|
|
})
|
|
|
|
it('应当正确格式化相对时间', () => {
|
|
expect(dateUtils.formatRelativeTime(new Date('2024-02-27 14:29:30'))).toBe('刚刚')
|
|
expect(dateUtils.formatRelativeTime(new Date('2024-02-27 14:25:00'))).toBe('5分钟前')
|
|
expect(dateUtils.formatRelativeTime(new Date('2024-02-27 13:30:00'))).toBe('1小时前')
|
|
expect(dateUtils.formatRelativeTime(new Date('2024-02-26 14:30:00'))).toBe('1天前')
|
|
expect(dateUtils.formatRelativeTime(new Date('2024-01-27 14:30:00'))).toBe('2024-01-27')
|
|
})
|
|
})
|
|
|
|
describe('getDayOfWeek', () => {
|
|
it('应当正确获取星期几', () => {
|
|
expect(dateUtils.getDayOfWeek(new Date('2024-02-27'))).toBe('星期二')
|
|
expect(dateUtils.getDayOfWeek(new Date('2024-02-25'))).toBe('星期日')
|
|
})
|
|
})
|
|
|
|
describe('getDaysUntilExpiration', () => {
|
|
it('应当正确计算到期天数', () => {
|
|
const current = new Date('2024-02-27')
|
|
const future = new Date('2024-03-01')
|
|
expect(dateUtils.getDaysUntilExpiration(current, future)).toBe('3天')
|
|
})
|
|
|
|
it('应当正确处理已过期情况', () => {
|
|
const current = new Date('2024-02-27')
|
|
const past = new Date('2024-02-26')
|
|
expect(dateUtils.getDaysUntilExpiration(current, past)).toBe('已过期')
|
|
})
|
|
})
|
|
})
|