rallly/apps/web/tests/timezone-change.spec.ts
2024-08-10 17:17:47 +00:00

78 lines
2.4 KiB
TypeScript

import { expect, test } from "@playwright/test";
test.describe("Timezone change", () => {
test("should show a dialog when the timezone changes", async ({ page }) => {
await page.goto("/");
await page.evaluate(() => {
localStorage.setItem("previousTimeZone", "some other timezone");
});
await page.reload();
const dialog = page.locator("text=Timezone Change Detected");
await expect(dialog).toBeVisible();
});
test("should not show a dialog when the timezone does not change", async ({
page,
}) => {
await page.goto("/");
await page.evaluate(() => {
localStorage.setItem(
"previousTimeZone",
Intl.DateTimeFormat().resolvedOptions().timeZone,
);
});
await page.reload();
const dialog = page.locator("text=Timezone Change Detected");
await expect(dialog).toBeHidden();
});
test("should not show dialog after user accepts a change", async ({
page,
}) => {
await page.goto("/");
await page.evaluate(() => {
localStorage.setItem("previousTimeZone", "some other timezone");
});
await page.reload();
await page.waitForSelector("text=Timezone Change Detected");
await page.click("text=Yes, update my timezone");
await page.reload();
const dialog = page.locator("text=Timezone Change Detected");
await expect(dialog).toBeHidden();
});
test("should not show dialog after user declines a change", async ({
page,
}) => {
await page.goto("/");
await page.evaluate(() => {
localStorage.setItem("previousTimeZone", "some other timezone");
});
await page.reload();
await page.waitForSelector("text=Timezone Change Detected");
await page.click("text=No, keep the current timezone");
await page.reload();
const dialog = page.locator("text=Timezone Change Detected");
await expect(dialog).toBeHidden();
});
test.describe("when localStorage is not available", () => {
test.beforeEach(async ({ page }) => {
await page.evaluate(() => {
Object.defineProperty(window, "localStorage", {
value: undefined,
writable: true,
});
});
});
test("should not show a dialog when the timezone changes", async ({
page,
}) => {
await page.goto("/");
await page.reload();
const dialog = page.locator("text=Timezone Change Detected");
await expect(dialog).toBeHidden();
});
});
});