rallly/apps/web/tests/timezone-change.spec.ts
2024-09-06 14:40:26 +00:00

69 lines
2 KiB
TypeScript

import { expect, test } from "@playwright/test";
test.describe("Timezone Change", () => {
test.beforeEach(async ({ page }) => {
await page.goto("/");
await page.evaluate(() => {
localStorage.clear();
});
});
test("does not show modal on initial load with no previous timezone", async ({
page,
}) => {
await page.reload();
const modal = page.locator("text=Timezone Change Detected");
await expect(modal).toBeHidden();
});
test("shows modal if stored timezone is different from current timezone", async ({
page,
}) => {
await page.evaluate(() =>
localStorage.setItem("previousTimeZone", "Fake/Timezone"),
);
await page.reload();
const modal = page.locator("text=Timezone Change Detected");
await expect(modal).toBeVisible();
});
test("accepting timezone change updates preferences and does not show modal again", async ({
page,
}) => {
await page.evaluate(() =>
localStorage.setItem("previousTimeZone", "Fake/Timezone"),
);
await page.reload();
await page.click("text=Yes, update my timezone");
await page.reload();
const modal = page.locator("text=Timezone Change Detected");
await expect(modal).toBeHidden();
});
test("declining timezone change updates localStorage but does not change preferences", async ({
page,
}) => {
await page.evaluate(() =>
localStorage.setItem("previousTimeZone", "Fake/Timezone"),
);
await page.reload();
await page.click("text=No, keep the current timezone");
await page.reload();
const modal = page.locator("text=Timezone Change Detected");
await expect(modal).toBeHidden();
});
test("does not show modal if localStorage is not available", async ({
page,
}) => {
await page.addInitScript(() => {
Object.defineProperty(window, "localStorage", {
value: undefined,
writable: true,
});
});
await page.reload();
const modal = page.locator("text=Timezone Change Detected");
await expect(modal).toBeHidden();
});
});