123456789import { beforeEach, describe, expect, it, vi } from "vitest";1011describe("denyAllPendingPasskeyRequests (M8/COR-009)", () => {12 beforeEach(() => {13 vi.resetModules();14 vi.useRealTimers();1516 const sessionStorage: Record<string, unknown> = {};17 const chromeMock = {18 runtime: { id: "peach-extension", sendMessage: vi.fn() },19 storage: {20 local: {21 get: vi.fn(async () => ({})),22 set: vi.fn(async () => {}),23 remove: vi.fn(async () => {}),24 },25 session: {26 get: vi.fn(async (key?: string) => {27 if (!key) return sessionStorage;28 return { [key]: sessionStorage[key] };29 }),30 set: vi.fn(async (next: Record<string, unknown>) => {31 Object.assign(sessionStorage, next);32 }),33 remove: vi.fn(async (keys: string | string[]) => {34 const list = Array.isArray(keys) ? keys : [keys];35 for (const key of list) delete sessionStorage[key];36 }),37 },38 },39 action: {40 openPopup: vi.fn(async () => {}),41 setBadgeText: vi.fn(async () => {}),42 setBadgeBackgroundColor: vi.fn(async () => {}),43 },44 } as unknown as typeof chrome;45 (globalThis as { chrome?: typeof chrome }).chrome = chromeMock;46 vi.stubGlobal("__PEACH_E2E_PASSKEYS__", false);47 });4849 it("resolves a pending approval as false in <200ms instead of 60s", async () => {50 const passkey = await import("./passkey");5152 53 54 55 56 57 58 59 60 61 62 const start = Date.now();63 await passkey.denyAllPendingPasskeyRequests();64 expect(Date.now() - start).toBeLessThan(200);65 });6667 it("is idempotent — second call also returns immediately", async () => {68 const passkey = await import("./passkey");69 await passkey.denyAllPendingPasskeyRequests();70 const start = Date.now();71 await passkey.denyAllPendingPasskeyRequests();72 expect(Date.now() - start).toBeLessThan(50);73 });74});