Files
calendar/apps/web/test/lib/getTimezone.test.ts
T
2024-10-24 09:10:27 -04:00

110 lines
4.4 KiB
TypeScript

import { expect, beforeEach, afterEach, it, vi, describe } from "vitest";
import { addTimezonesToDropdown, handleOptionLabel, filterBySearchText } from "@calcom/lib/timezone";
const timezonesFixture = [
{ label: "San Francisco", timezone: "America/Argentina/Cordoba" },
{ label: "San Francisco", timezone: "America/Los_Angeles" },
{ label: "Sao Francisco do Sul", timezone: "America/Sao_Paulo" },
{ label: "San Francisco de Macoris", timezone: "America/Santo_Domingo" },
{ label: "San Francisco Gotera", timezone: "America/El_Salvador" },
{ label: "Eastern Time - US & Canada", timezone: "America/New_York" },
{ label: "Pacific Time - US & Canada", timezone: "America/Los_Angeles" },
{ label: "Central Time - US & Canada", timezone: "America/Chicago" },
{ label: "Mountain Time - US & Canada", timezone: "America/Denver" },
{ label: "Atlantic Time - Canada", timezone: "America/Halifax" },
{ label: "Eastern European Time", timezone: "Europe/Bucharest" },
{ label: "Central European Time", timezone: "Europe/Berlin" },
{ label: "Western European Time", timezone: "Europe/London" },
{ label: "Australian Eastern Time", timezone: "Australia/Sydney" },
{ label: "Japan Standard Time", timezone: "Asia/Tokyo" },
{ label: "India Standard Time", timezone: "Asia/Kolkata" },
{ label: "Gulf Standard Time", timezone: "Asia/Dubai" },
{ label: "South Africa Standard Time", timezone: "Africa/Johannesburg" },
{ label: "Brazil Time", timezone: "America/Sao_Paulo" },
{ label: "Hawaii-Aleutian Standard Time", timezone: "Pacific/Honolulu" },
];
const option = {
value: "America/Los_Angeles",
label: "(GMT-8:00) San Francisco",
offset: -8,
abbrev: "PST",
altName: "Pacific Standard Time",
};
describe("getTimezone", () => {
beforeEach(() => {
vi.useFakeTimers().setSystemTime(new Date("2020-01-01"));
});
afterEach(() => {
vi.runOnlyPendingTimers();
vi.useRealTimers();
});
it("should return empty array for an empty string", () => {
expect(filterBySearchText("", timezonesFixture)).toMatchInlineSnapshot(`[]`);
});
it("should filter cities for a valid city name", () => {
expect(filterBySearchText("San Francisco", timezonesFixture)).toMatchInlineSnapshot(`
[
{
"label": "San Francisco",
"timezone": "America/Argentina/Cordoba",
},
{
"label": "San Francisco",
"timezone": "America/Los_Angeles",
},
{
"label": "San Francisco de Macoris",
"timezone": "America/Santo_Domingo",
},
{
"label": "San Francisco Gotera",
"timezone": "America/El_Salvador",
},
]
`);
});
it("should return appropriate timezone(s) for a given city name array", () => {
expect(addTimezonesToDropdown(timezonesFixture)).toMatchInlineSnapshot(`
{
"Africa/Johannesburg": "South Africa Standard Time",
"America/Argentina/Cordoba": "San Francisco",
"America/Chicago": "Central Time - US & Canada",
"America/Denver": "Mountain Time - US & Canada",
"America/El_Salvador": "San Francisco Gotera",
"America/Halifax": "Atlantic Time - Canada",
"America/Los_Angeles": "Pacific Time - US & Canada",
"America/New_York": "Eastern Time - US & Canada",
"America/Santo_Domingo": "San Francisco de Macoris",
"America/Sao_Paulo": "Brazil Time",
"Asia/Dubai": "Gulf Standard Time",
"Asia/Kolkata": "India Standard Time",
"Asia/Tokyo": "Japan Standard Time",
"Australia/Sydney": "Australian Eastern Time",
"Europe/Berlin": "Central European Time",
"Europe/Bucharest": "Eastern European Time",
"Europe/London": "Western European Time",
"Pacific/Honolulu": "Hawaii-Aleutian Standard Time",
}
`);
});
it("should render city name as option label if cityData is not empty", () => {
expect(handleOptionLabel(option, timezonesFixture)).toMatchInlineSnapshot(`"San Francisco GMT -8:00"`);
vi.setSystemTime(new Date("2020-06-01"));
expect(handleOptionLabel(option, timezonesFixture)).toMatchInlineSnapshot(`"San Francisco GMT -7:00"`);
});
it("should return timezone as option label if cityData is empty", () => {
expect(handleOptionLabel(option, [])).toMatchInlineSnapshot(`"America/Los Angeles GMT -8:00"`);
vi.setSystemTime(new Date("2020-06-01"));
expect(handleOptionLabel(option, [])).toMatchInlineSnapshot(`"America/Los Angeles GMT -7:00"`);
});
});