109 lines · 2.8 KB · TypeScript
RawDownload
import { assert, describe, it } from "@effect/vitest";import * as Effect from "effect/Effect";import { beforeEach, vi } from "vite-plus/test"; const {  appendSwitchMock,  exitMock,  getAppPathMock,  getVersionMock,  onMock,  quitMock,  relaunchMock,  removeListenerMock,  setAboutPanelOptionsMock,  setAppUserModelIdMock,  setDesktopNameMock,  setDockIconMock,  setNameMock,  setPathMock,  whenReadyMock,} = vi.hoisted(() => ({  appendSwitchMock: vi.fn(),  exitMock: vi.fn(),  getAppPathMock: vi.fn(() => "/app"),  getVersionMock: vi.fn(() => "1.2.3"),  onMock: vi.fn(),  quitMock: vi.fn(),  relaunchMock: vi.fn(),  removeListenerMock: vi.fn(),  setAboutPanelOptionsMock: vi.fn(),  setAppUserModelIdMock: vi.fn(),  setDesktopNameMock: vi.fn(),  setDockIconMock: vi.fn(),  setNameMock: vi.fn(),  setPathMock: vi.fn(),  whenReadyMock: vi.fn(() => Promise.resolve()),})); vi.mock("electron", () => ({  app: {    commandLine: {      appendSwitch: appendSwitchMock,    },    dock: {      setIcon: setDockIconMock,    },    getAppPath: getAppPathMock,    getVersion: getVersionMock,    isPackaged: true,    name: "T3 Code",    on: onMock,    quit: quitMock,    relaunch: relaunchMock,    removeListener: removeListenerMock,    runningUnderARM64Translation: false,    setAboutPanelOptions: setAboutPanelOptionsMock,    setAppUserModelId: setAppUserModelIdMock,    setDesktopName: setDesktopNameMock,    setName: setNameMock,    setPath: setPathMock,    whenReady: whenReadyMock,    exit: exitMock,  },})); import * as ElectronApp from "./ElectronApp.ts"; describe("ElectronApp", () => {  beforeEach(() => {    appendSwitchMock.mockClear();    exitMock.mockClear();    onMock.mockClear();    quitMock.mockClear();    relaunchMock.mockClear();    removeListenerMock.mockClear();    setPathMock.mockClear();  });   it.effect("reads app metadata through the service", () =>    Effect.gen(function* () {      const electronApp = yield* ElectronApp.ElectronApp;      const metadata = yield* electronApp.metadata;       assert.deepEqual(metadata, {        appVersion: "1.2.3",        appPath: "/app",        isPackaged: true,        resourcesPath: process.resourcesPath,        runningUnderArm64Translation: false,      });    }).pipe(Effect.provide(ElectronApp.layer)),  );   it.effect("scopes app event listeners", () =>    Effect.gen(function* () {      const listener = vi.fn();       yield* Effect.scoped(        Effect.gen(function* () {          const electronApp = yield* ElectronApp.ElectronApp;          yield* electronApp.on("activate", listener);        }),      );       assert.deepEqual(onMock.mock.calls, [["activate", listener]]);      assert.deepEqual(removeListenerMock.mock.calls, [["activate", listener]]);    }).pipe(Effect.provide(ElectronApp.layer)),  );});