33 lines
1.5 KiB
TypeScript
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();
|
|
});
|