import { assert, describe, it } from "@effect/vitest"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import { vi } from "vite-plus/test"; const { createClerkBridgeMock, storageAdapter, storageMock } = vi.hoisted(() => ({ createClerkBridgeMock: vi.fn(), storageAdapter: { getItem: vi.fn(), setItem: vi.fn(), removeItem: vi.fn(), }, storageMock: vi.fn(), })); vi.mock("@clerk/electron", () => ({ createClerkBridge: createClerkBridgeMock, })); vi.mock("@clerk/electron/storage", () => ({ storage: storageMock, })); import * as DesktopClerk from "./DesktopClerk.ts"; import * as DesktopEnvironment from "./DesktopEnvironment.ts"; describe("DesktopClerk", () => { it("derives the Clerk Frontend API hostname used by the desktop CSP", () => { const publishableKey = `pk_test_${btoa("clerk.t3.codes$")}`; assert.equal( DesktopClerk.resolveDesktopClerkFrontendApiHostname(publishableKey), "clerk.t3.codes", ); assert.equal(DesktopClerk.resolveDesktopClerkFrontendApiHostname(""), undefined); assert.equal(DesktopClerk.resolveDesktopClerkFrontendApiHostname("invalid"), undefined); }); it.effect("acquires and releases the SDK bridge with the layer", () => { const cleanup = vi.fn(); storageMock.mockReturnValue(storageAdapter); createClerkBridgeMock.mockReturnValue({ cleanup }); const environment = DesktopEnvironment.DesktopEnvironment.of({ stateDir: "/tmp/t3-state", isDevelopment: true, } as unknown as DesktopEnvironment.DesktopEnvironment["Service"]); return Effect.gen(function* () { yield* Effect.scoped( Layer.build( DesktopClerk.layer.pipe( Layer.provide(Layer.succeed(DesktopEnvironment.DesktopEnvironment, environment)), ), ), ); assert.deepEqual(createClerkBridgeMock.mock.calls, [ [ { storage: storageAdapter, passkeys: true, renderer: { scheme: "t3code-dev", host: "app" }, }, ], ]); assert.equal(cleanup.mock.calls.length, 1); storageMock.mockClear(); createClerkBridgeMock.mockClear(); }); }); it.each([ { isDevelopment: true, scheme: "t3code-dev" }, { isDevelopment: false, scheme: "t3code" }, ])("configures the SDK with the $scheme renderer origin", ({ isDevelopment, scheme }) => { const bridge = { cleanup: vi.fn() }; storageMock.mockReturnValue(storageAdapter); createClerkBridgeMock.mockReturnValue(bridge); assert.equal(DesktopClerk.createDesktopClerkBridge("/tmp/t3-state", isDevelopment), bridge); assert.deepEqual(storageMock.mock.calls, [[{ path: "/tmp/t3-state" }]]); assert.deepEqual(createClerkBridgeMock.mock.calls, [ [ { storage: storageAdapter, passkeys: true, renderer: { scheme, host: "app" }, }, ], ]); storageMock.mockClear(); createClerkBridgeMock.mockClear(); }); });