import { describe, expect, it, beforeAll, vi } from "vitest"; import dayjs from "@calcom/dayjs"; import { formatToLocalizedTimezone } from "./index"; beforeAll(() => { vi.setSystemTime(dayjs.utc("2024-06-15T12:00:00Z").toDate()); }); describe("formatToLocalizedTimezone", () => { it("returns a localized timezone string for a Date object with explicit timezone", () => { const date = new Date("2024-06-15T12:00:00Z"); const result = formatToLocalizedTimezone(date, "en", "America/New_York"); expect(result).toBeDefined(); expect(typeof result).toBe("string"); // Should contain recognizable timezone name like "Eastern Daylight Time" expect(result!.length).toBeGreaterThan(0); }); it("returns a localized timezone string for a Dayjs object with explicit timezone", () => { const date = dayjs.utc("2024-06-15T12:00:00Z"); const result = formatToLocalizedTimezone(date, "en", "America/New_York"); expect(result).toBeDefined(); expect(typeof result).toBe("string"); expect(result!.length).toBeGreaterThan(0); }); it("returns consistent results for Date and Dayjs objects with same timezone", () => { const jsDate = new Date("2024-06-15T12:00:00Z"); const djsDate = dayjs.utc("2024-06-15T12:00:00Z"); const resultDate = formatToLocalizedTimezone(jsDate, "en", "America/New_York"); const resultDayjs = formatToLocalizedTimezone(djsDate, "en", "America/New_York"); expect(resultDate).toBe(resultDayjs); }); it("returns different results for different timezones", () => { const date = new Date("2024-06-15T12:00:00Z"); const nyResult = formatToLocalizedTimezone(date, "en", "America/New_York"); const tokyoResult = formatToLocalizedTimezone(date, "en", "Asia/Tokyo"); expect(nyResult).not.toBe(tokyoResult); }); it("returns a short timezone name when timeZoneName is 'short'", () => { const date = new Date("2024-06-15T12:00:00Z"); const longResult = formatToLocalizedTimezone(date, "en", "America/New_York", "long"); const shortResult = formatToLocalizedTimezone(date, "en", "America/New_York", "short"); expect(shortResult).toBeDefined(); expect(longResult).toBeDefined(); // Short name should be shorter than or equal to long name expect(shortResult!.length).toBeLessThanOrEqual(longResult!.length); }); it("defaults to long timezone name when timeZoneName is not provided", () => { const date = new Date("2024-06-15T12:00:00Z"); const defaultResult = formatToLocalizedTimezone(date, "en", "America/New_York"); const longResult = formatToLocalizedTimezone(date, "en", "America/New_York", "long"); expect(defaultResult).toBe(longResult); }); it("works with undefined locale (falls back to environment default)", () => { const date = new Date("2024-06-15T12:00:00Z"); const result = formatToLocalizedTimezone(date, undefined, "America/New_York"); expect(result).toBeDefined(); expect(typeof result).toBe("string"); expect(result!.length).toBeGreaterThan(0); }); it("handles UTC timezone", () => { const date = new Date("2024-06-15T12:00:00Z"); const result = formatToLocalizedTimezone(date, "en", "UTC"); expect(result).toBeDefined(); expect(result).toContain("Coordinated Universal Time"); }); it("handles Europe/London timezone", () => { const date = new Date("2024-06-15T12:00:00Z"); const result = formatToLocalizedTimezone(date, "en", "Europe/London"); expect(result).toBeDefined(); expect(typeof result).toBe("string"); expect(result!.length).toBeGreaterThan(0); }); it("handles Pacific/Auckland timezone", () => { const date = new Date("2024-06-15T12:00:00Z"); const result = formatToLocalizedTimezone(date, "en", "Pacific/Auckland"); expect(result).toBeDefined(); expect(typeof result).toBe("string"); expect(result!.length).toBeGreaterThan(0); }); });