import { expect, it } from "@effect/vitest";import * as Effect from "effect/Effect";import { ChildProcessSpawner } from "effect/unstable/process";import { vi } from "vite-plus/test"; vi.mock("@napi-rs/keyring", () => { throw new Error("Cannot find native binding");}); it("loads browser import code without a keyring native binding", async () => { await expect(import("./ChromiumKeys.ts")).resolves.toBeDefined();}); it.effect("reports an unavailable keychain when the macOS binding cannot load", () => Effect.gen(function* () { const { ChromiumKeyError, resolveChromiumKeys } = yield* Effect.promise( () => import("./ChromiumKeys.ts"), ); const error = yield* resolveChromiumKeys({ platform: "darwin", keychainService: "Chrome Safe Storage", keychainAccount: "Chrome", linuxSecretApplication: undefined, }).pipe(Effect.flip); expect(error).toBeInstanceOf(ChromiumKeyError); expect(error.reason).toBe("keychainUnavailable"); expect(error.cause).toBeInstanceOf(Error); }).pipe( Effect.provideService( ChildProcessSpawner.ChildProcessSpawner, ChildProcessSpawner.make(() => Effect.die("must not spawn")), ), ),);
import { expect, it } from "@effect/vitest";
import * as Effect from "effect/Effect";
import { ChildProcessSpawner } from "effect/unstable/process";
import { vi } from "vite-plus/test";
vi.mock("@napi-rs/keyring", () => {
throw new Error("Cannot find native binding");
});
it("loads browser import code without a keyring native binding", async () => {
await expect(import("./ChromiumKeys.ts")).resolves.toBeDefined();
});
it.effect("reports an unavailable keychain when the macOS binding cannot load", () =>
Effect.gen(function* () {
const { ChromiumKeyError, resolveChromiumKeys } = yield* Effect.promise(
() => import("./ChromiumKeys.ts"),
);
const error = yield* resolveChromiumKeys({
platform: "darwin",
keychainService: "Chrome Safe Storage",
keychainAccount: "Chrome",
linuxSecretApplication: undefined,
}).pipe(Effect.flip);
expect(error).toBeInstanceOf(ChromiumKeyError);
expect(error.reason).toBe("keychainUnavailable");
expect(error.cause).toBeInstanceOf(Error);
}).pipe(
Effect.provideService(
ChildProcessSpawner.ChildProcessSpawner,
ChildProcessSpawner.make(() => Effect.die("must not spawn")),
),
),
);