import { describe, expect, it, vi } from "vite-plus/test"; import { makeDesktopClerkExternalAccountAdapter, type DesktopClerkUser, } from "./desktopClerkExternalAccounts"; describe("desktop Clerk external account adapter", () => { it("replaces renderer redirects with native callbacks and reloads the user on return", async () => { const callbacks: ((rawUrl: string) => void)[] = []; const callbackCleanup = vi.fn(); const bridge = { createCloudAuthRequest: vi .fn() .mockResolvedValueOnce("t3code://auth/callback?t3_state=add") .mockResolvedValueOnce("t3code://auth/callback?t3_state=reconnect"), onCloudAuthCallback: vi.fn((listener: (rawUrl: string) => void) => { callbacks.push(listener); return callbackCleanup; }), }; const reauthorize = vi.fn(async (_params: Record) => account); const account = { reauthorize }; const createExternalAccount = vi.fn(async (_params: Record) => account); const reload = vi.fn(async () => undefined); const user = { externalAccounts: [], createExternalAccount, reload, } satisfies DesktopClerkUser; const adapter = makeDesktopClerkExternalAccountAdapter({ bridge }); adapter.installUser(user); await user.createExternalAccount({ redirectUrl: "http://127.0.0.1:3773/?__clerk_modal_state=state", strategy: "oauth_microsoft", }); expect(createExternalAccount).toHaveBeenCalledWith({ redirectUrl: "t3code://auth/callback?t3_state=add", strategy: "oauth_microsoft", }); callbacks[0]?.("t3code://auth/callback?t3_state=add"); await Promise.resolve(); expect(reload).toHaveBeenCalledOnce(); await account.reauthorize({ redirectUrl: "http://127.0.0.1:3773/?__clerk_modal_state=state", }); expect(reauthorize).toHaveBeenCalledWith({ redirectUrl: "t3code://auth/callback?t3_state=reconnect", }); }); it("cleans up the pending callback when Clerk rejects account creation", async () => { const callbackCleanup = vi.fn(); const bridge = { createCloudAuthRequest: vi.fn().mockResolvedValue("t3code://auth/callback?t3_state=failed"), onCloudAuthCallback: vi.fn(() => callbackCleanup), }; const createError = new Error("oauth provider unavailable"); const user = { externalAccounts: [], createExternalAccount: vi.fn(async (_params: Record) => { throw createError; }), reload: vi.fn(async () => undefined), } satisfies DesktopClerkUser; const adapter = makeDesktopClerkExternalAccountAdapter({ bridge }); adapter.installUser(user); await expect(user.createExternalAccount({ strategy: "oauth_microsoft" })).rejects.toBe( createError, ); expect(callbackCleanup).toHaveBeenCalledOnce(); }); });