35 lines · 1.2 KB · TypeScript
RawDownload
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")),    ),  ),);