import { beforeEach, vi } from "vitest"; type AsyncMock = { (...args: TArgs): Promise; mockReset: () => AsyncMock; mockResolvedValue: (value: TResult) => AsyncMock; mockResolvedValueOnce: (value: TResult) => AsyncMock; }; export const sendMessageMock = vi.fn() as AsyncMock; export const readAllowFromStoreMock = vi.fn() as AsyncMock; export const upsertPairingRequestMock = vi.fn() as AsyncMock; let config: Record = {}; export function setAccessControlTestConfig(next: Record): void { config = next; } export function setupAccessControlTestHarness(): void { beforeEach(() => { config = { channels: { whatsapp: { dmPolicy: "pairing", allowFrom: [], }, }, }; sendMessageMock.mockReset().mockResolvedValue(undefined); readAllowFromStoreMock.mockReset().mockResolvedValue([]); upsertPairingRequestMock.mockReset().mockResolvedValue({ code: "PAIRCODE", created: true }); }); } vi.mock("../../../../src/config/config.js", async (importOriginal) => { const actual = await importOriginal(); return { ...actual, loadConfig: () => config, }; }); vi.mock("../../../../src/pairing/pairing-store.js", () => ({ readChannelAllowFromStore: (...args: unknown[]) => readAllowFromStoreMock(...args), upsertChannelPairingRequest: (...args: unknown[]) => upsertPairingRequestMock(...args), }));