Files
EventLens-Public/frontend/e2e/settings-storage-failure.spec.ts

33 lines
1.5 KiB
TypeScript

import { expect, test } from "@playwright/test";
test("settings keeps session state and reports a persistence failure", async ({ page }) => {
await page.addInitScript(() => {
const originalSetItem = Storage.prototype.setItem;
Storage.prototype.setItem = function setItem(key: string, value: string) {
if (key === "eventlens.preferences.v1") {
throw new DOMException("Storage is unavailable", "QuotaExceededError");
}
return originalSetItem.call(this, key, value);
};
});
await page.goto("/#settings");
const compact = page.getByRole("radio", { name: /Compact/i });
await compact.press("Space");
await expect(compact).toBeChecked();
await expect(page.locator(".settings-save-feedback")).toHaveText("Preferences changed for this session only");
await expect(page.getByText("Saved automatically in this browser", { exact: true })).toBeHidden();
await expect(page.getByText("Preferences are available for this session only because browser storage is unavailable.")).toBeVisible();
await expect(page.getByText("Not saved to browser storage")).toBeVisible();
await expect(page.getByText("Interface preferences for this session")).toBeVisible();
await page.waitForTimeout(2_600);
await expect(page.getByRole("status")).toHaveText("Preferences changed for this session only");
await expect(page.getByText("Saved automatically in this browser", { exact: true })).toBeHidden();
await page.reload();
await expect(page.getByRole("radio", { name: /Comfortable/i })).toBeChecked();
});