src/lib/passkey-nudge.test.ts
Rama main · réplica de lectura del repositorio original.
import { beforeEach, describe, expect, it } from "vitest";
import {
dismissPasskeyNudge,
isPasskeyNudgeDismissed,
restorePasskeyNudge,
} from "./passkey-nudge";
import { memoryStorage, useStorage } from "@/test/memory-storage";
// `window.localStorage` is installed per test rather than used as jsdom provides
// it - see `test/memory-storage.ts` for why.
beforeEach(() => {
useStorage(memoryStorage());
});
describe("dismissPasskeyNudge / isPasskeyNudgeDismissed", () => {
it("offers the nudge to a browser that has never seen it", () => {
expect(isPasskeyNudgeDismissed()).toBe(false);
});
it("remembers a dismissal", () => {
dismissPasskeyNudge();
expect(isPasskeyNudgeDismissed()).toBe(true);
});
// Showing the card again is the harmless side of a storage failure: the diver
// dismisses it a second time, where the other way round would mean never
// offering a passkey at all.
it("keeps offering when the browser refuses storage", () => {
useStorage(undefined);
expect(() => dismissPasskeyNudge()).not.toThrow();
expect(isPasskeyNudgeDismissed()).toBe(false);
});
});
describe("restorePasskeyNudge", () => {
it("puts a dismissed browser back where it started", () => {
dismissPasskeyNudge();
restorePasskeyNudge();
expect(isPasskeyNudgeDismissed()).toBe(false);
// Removed rather than set to some "show me" value: absence is already what
// an undismissed browser looks like, and a second stored state would mean
// the same as no stored state.
expect(
window.localStorage.getItem("opendiving:passkey-nudge-dismissed"),
).toBeNull();
});
it("is harmless on a browser that never dismissed anything", () => {
expect(() => restorePasskeyNudge()).not.toThrow();
expect(isPasskeyNudgeDismissed()).toBe(false);
});
it("says nothing when the browser refuses storage", () => {
useStorage(undefined);
expect(() => restorePasskeyNudge()).not.toThrow();
});
});