import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import moment from 'moment' import { globalGetDate } from '../../../script/moment' describe('globalGetDate', () => { beforeEach(() => { vi.useFakeTimers() vi.setSystemTime(new Date('2024-01-10T08:00:00.000Z')) }) afterEach(() => { vi.useRealTimers() }) it('dur 返回 moment.duration 实例并保留毫秒值', () => { const duration = globalGetDate.dur(3600 * 1000) expect(duration.asHours()).toBe(1) expect(duration.asMilliseconds()).toBe(3600 * 1000) }) it('timeInterval 在 AddDayCount 为正数时返回从明天到目标日期的区间', () => { const [start, end] = globalGetDate.timeInterval(2) expect([start, end]).toEqual(['2024-01-11', '2024-01-12']) }) it('timeInterval 在 AddDayCount=-1 时返回昨天到今天的有序区间', () => { const [start, end] = globalGetDate.timeInterval(-1) expect([start, end]).toEqual(['2024-01-09', '2024-01-10']) }) it('addDay 支持基于字符串日期偏移并格式化输出', () => { expect(globalGetDate.addDay('2024-01-01', 2)).toBe('2024-01-03') expect(globalGetDate.addDay('2024-01-01', -1)).toBe('2023-12-31') }) it('addDay 支持自定义 format 和 type', () => { expect(globalGetDate.addDay('2024-01-01 12:00:00', 1, 'YYYY-MM-DD HH:mm:ss', 'M')).toBe('2024-02-01 12:00:00') }) it('getStartOf 返回指定时间粒度的开始时间', () => { expect(globalGetDate.getStartOf('2024-03-15 10:20:30' as any, 'day', 'YYYY-MM-DD HH:mm:ss')).toBe('2024-03-15 00:00:00') expect(globalGetDate.getStartOf('2024-03-15 10:20:30' as any, 'month', 'YYYY-MM-DD')).toBe('2024-03-01') }) it('intervalAllDates 返回起止区间内的全部日期', () => { expect(globalGetDate.intervalAllDates('2024-01-01', '2024-01-03', 'YYYY-MM-DD')).toEqual([ '2024-01-01', '2024-01-02', '2024-01-03' ]) }) it('intervalAllDates 在 start=end 时返回单元素数组', () => { expect(globalGetDate.intervalAllDates('2024-01-01', '2024-01-01', 'YYYY-MM-DD')).toEqual(['2024-01-01']) }) it('format 对 null 返回空字符串,其他值正常格式化', () => { expect(globalGetDate.format(null as any)).toBe('') expect(globalGetDate.format('2024-01-01 03:04:05', 'YYYY-MM-DD')).toBe('2024-01-01') }) it('valueOf 返回时间戳数值', () => { expect(globalGetDate.valueOf('2024-01-01 00:00:00')).toBe(moment('2024-01-01 00:00:00').valueOf()) }) })