Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

111 lines
3.8 KiB
TypeScript

import { afterEach, describe, expect, it, vi } from "vitest";
import { setCurrentAgentGuiI18nLocaleForTests } from "../../../../i18n/runtime";
import { formatAgentMessageTimestamp, toRelativeTime } from "./format";
describe("toRelativeTime", () => {
afterEach(() => {
setCurrentAgentGuiI18nLocaleForTests("en");
vi.useRealTimers();
});
it("formats relative timestamps for English locale", () => {
vi.useFakeTimers();
vi.setSystemTime(new Date("2026-06-24T12:00:00Z"));
setCurrentAgentGuiI18nLocaleForTests("en");
expect(toRelativeTime("2026-06-14T12:00:00Z")).toBe("10 days ago");
expect(toRelativeTime("2026-04-24T12:00:00Z")).toBe("2 months ago");
expect(toRelativeTime("2024-06-24T12:00:00Z")).toBe("2 years ago");
});
it("formats relative timestamps for Chinese locale with readable digit spacing", () => {
vi.useFakeTimers();
vi.setSystemTime(new Date("2026-06-24T12:00:00Z"));
setCurrentAgentGuiI18nLocaleForTests("zh-CN");
expect(toRelativeTime("2026-06-14T12:00:00Z")).toBe("10 天前");
expect(toRelativeTime("2026-04-24T12:00:00Z")).toBe("2 个月前");
expect(toRelativeTime("2024-06-24T12:00:00Z")).toBe("2 年前");
});
});
describe("formatAgentMessageTimestamp", () => {
afterEach(() => {
setCurrentAgentGuiI18nLocaleForTests("en");
vi.useRealTimers();
});
it("formats messages from the current week as weekday and time", () => {
vi.useFakeTimers();
const now = new Date(2026, 5, 28, 21, 30);
vi.setSystemTime(now);
setCurrentAgentGuiI18nLocaleForTests("en");
const timestamp = new Date(2026, 5, 28, 20, 7).getTime();
expect(formatAgentMessageTimestamp(timestamp)).toBe("Sunday 20:07");
});
it("uses Monday as the start of the current week", () => {
vi.useFakeTimers();
const now = new Date(2026, 5, 28, 21, 30);
vi.setSystemTime(now);
setCurrentAgentGuiI18nLocaleForTests("en");
const timestamp = new Date(2026, 5, 22, 0, 0).getTime();
expect(formatAgentMessageTimestamp(timestamp)).toBe("Monday 00:00");
});
it("formats messages from last week with short date and time", () => {
vi.useFakeTimers();
const now = new Date(2026, 5, 28, 21, 30);
vi.setSystemTime(now);
setCurrentAgentGuiI18nLocaleForTests("en");
const timestamp = new Date(2026, 5, 21, 20, 7).getTime();
expect(formatAgentMessageTimestamp(timestamp)).toBe("Jun 21, 20:07");
});
it("formats older messages with short date and time", () => {
vi.useFakeTimers();
const now = new Date(2026, 5, 28, 21, 30);
vi.setSystemTime(now);
setCurrentAgentGuiI18nLocaleForTests("en");
const timestamp = new Date(2026, 4, 12, 9, 5).getTime();
expect(formatAgentMessageTimestamp(timestamp)).toBe("May 12, 09:05");
});
it("formats Chinese current-week timestamps with readable spacing", () => {
vi.useFakeTimers();
const now = new Date(2026, 5, 28, 21, 30);
vi.setSystemTime(now);
setCurrentAgentGuiI18nLocaleForTests("zh-CN");
const timestamp = new Date(2026, 5, 28, 20, 7).getTime();
expect(formatAgentMessageTimestamp(timestamp)).toBe("星期日 20:07");
});
it("formats Chinese older timestamps through the existing short formatter", () => {
vi.useFakeTimers();
const now = new Date(2026, 5, 28, 21, 30);
vi.setSystemTime(now);
setCurrentAgentGuiI18nLocaleForTests("zh-CN");
const timestamp = new Date(2026, 5, 21, 20, 7).getTime();
expect(formatAgentMessageTimestamp(timestamp)).toBe("6/21 20:07");
});
it("returns null for empty or non-finite timestamps", () => {
expect(formatAgentMessageTimestamp(null)).toBeNull();
expect(formatAgentMessageTimestamp(undefined)).toBeNull();
expect(formatAgentMessageTimestamp(Number.NaN)).toBeNull();
expect(formatAgentMessageTimestamp(Number.POSITIVE_INFINITY)).toBeNull();
});
});