import { describe, expect, it } from "@effect/vitest"; import { EnvironmentId } from "@t3tools/contracts"; import * as Effect from "effect/Effect"; import { loadPreviewWebviewConfig, PreviewWebviewBridgeUnavailableError, PreviewWebviewConfigLoadError, } from "./previewWebviewConfigState"; const environmentId = EnvironmentId.make("environment-1"); describe("loadPreviewWebviewConfig", () => { it.effect("reports a structurally distinct missing-bridge failure", () => Effect.gen(function* () { const error = yield* loadPreviewWebviewConfig(environmentId, undefined, null).pipe( Effect.flip, ); expect(error).toBeInstanceOf(PreviewWebviewBridgeUnavailableError); expect(error.environmentId).toBe(environmentId); expect(error.message).toContain(environmentId); expect("cause" in error).toBe(false); }), ); it.effect("preserves the bridge rejection as the load failure cause", () => Effect.gen(function* () { const cause = new Error("ipc unavailable"); const error = yield* loadPreviewWebviewConfig(environmentId, undefined, { getPreviewConfig: () => Promise.reject(cause), }).pipe(Effect.flip); expect(error).toBeInstanceOf(PreviewWebviewConfigLoadError); expect(error.environmentId).toBe(environmentId); expect(error.cause).toBe(cause); expect(error.message).not.toContain(cause.message); }), ); it.effect("forwards the environment id and profile to the bridge", () => Effect.gen(function* () { let requested: { environmentId: EnvironmentId; profileId: string | undefined } | null = null; const config = { partition: "persist:test-preview", webPreferences: "sandbox=yes", preloadUrl: null, }; const result = yield* loadPreviewWebviewConfig(environmentId, "work", { getPreviewConfig: (requestedEnvironmentId, profileId) => { requested = { environmentId: requestedEnvironmentId, profileId }; return Promise.resolve(config); }, }); // The partition is derived in main from both, so both have to arrive. expect(requested).toEqual({ environmentId, profileId: "work" }); expect(result).toEqual(config); }), ); });