import { expect, test, vi } from "vitest" import { temporalFormatToRelativeTime, temporalFormatToWechatRelativeTime, temporalFormatToYYYYMMDD, temporalFormatToYYYYMMDDhhmmss, temporalFormatTohhmmss, temporalHumanize, temporalIsOutdated, } from "#Source/basic/index.ts" test("temporalIsOutdated returns expected values", () => { const now = new Date(2_024, 0, 2, 0, 0, 0).getTime() const nowSpy = vi.spyOn(Date, "now").mockReturnValue(now) expect(temporalIsOutdated(new Date(now - 1_000))).toBe(true) expect(temporalIsOutdated(new Date(now + 1_000))).toBe(false) expect(temporalIsOutdated("not-a-date")).toBe(false) nowSpy.mockRestore() }) test("temporalFormatToYYYYMMDD formats dates", () => { const timestamp = new Date(2_000, 0, 2, 3, 4, 5).getTime() expect(temporalFormatToYYYYMMDD(timestamp)).toBe("2000-01-02") expect(temporalFormatToYYYYMMDD(timestamp, "/")).toBe("2000/01/02") }) test("temporalFormatTohhmmss formats times", () => { const timestamp = new Date(2_000, 0, 2, 3, 4, 5).getTime() expect(temporalFormatTohhmmss(timestamp)).toBe("03:04:05") expect(temporalFormatTohhmmss(timestamp, "-")).toBe("03-04-05") }) test("temporalFormatToYYYYMMDDhhmmss formats date and time", () => { const timestamp = new Date(2_000, 0, 2, 3, 4, 5).getTime() expect(temporalFormatToYYYYMMDDhhmmss(timestamp)).toBe("2000-01-02 03:04:05") }) test("temporalFormatToRelativeTime returns expected labels", () => { const now = new Date(2_024, 0, 2, 0, 0, 0).getTime() const nowSpy = vi.spyOn(Date, "now").mockReturnValue(now) expect(temporalFormatToRelativeTime(now - 30_000)).toBe("刚刚") expect(temporalFormatToRelativeTime(now - 120_000)).toBe("2 分钟前") expect(temporalFormatToRelativeTime(now - 3_600_000)).toBe("1 小时前") expect(temporalFormatToRelativeTime(now - 90_000_000)).toBe("昨天") expect(temporalFormatToRelativeTime(now - 259_200_000)).toBe("一周内") expect(temporalFormatToRelativeTime(now - 691_200_000)).toBe("2023-12-25 00:00:00") nowSpy.mockRestore() }) test("temporalFormatToWechatRelativeTime formats WeChat-style labels", () => { vi.useFakeTimers() vi.setSystemTime(new Date(2_024, 0, 3, 12, 0, 0)) expect( temporalFormatToWechatRelativeTime({ timestamp: new Date(2_024, 0, 3, 9, 5, 0).getTime() }), ).toBe("09:05") expect( temporalFormatToWechatRelativeTime({ timestamp: new Date(2_024, 0, 2, 9, 0, 0).getTime() }), ).toBe("昨天") expect( temporalFormatToWechatRelativeTime({ timestamp: new Date(2_024, 0, 2, 9, 0, 0).getTime(), alwaysShowTime: true, }), ).toBe("昨天 09:00") expect( temporalFormatToWechatRelativeTime({ timestamp: new Date(2_024, 0, 1, 8, 0, 0).getTime() }), ).toBe("星期一") expect( temporalFormatToWechatRelativeTime({ timestamp: new Date(2_023, 11, 24, 18, 30, 0).getTime() }), ).toBe("23/12/24") vi.useRealTimers() }) test("temporalHumanize returns expected labels", () => { const nowSpy = vi.spyOn(Date, "now").mockReturnValue(3_600_000) expect(temporalHumanize(3_600_000)).toBe("刚刚") expect(temporalHumanize(0)).toBe("1 小时前") nowSpy.mockRestore() })