97 lines · 3.0 KB · TypeScript
RawDownload
import type { DesktopWslState } from "@t3tools/contracts";import * as Cause from "effect/Cause";import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";import { AtomRegistry } from "effect/unstable/reactivity";import { describe, expect, it, vi } from "vite-plus/test"; import { createDesktopWslStateAtom } from "./desktopWslState"; const wslState: DesktopWslState = {  available: true,  distro: null,  distros: [    {      isDefault: true,      name: "Ubuntu",      version: 2,    },  ],  enabled: true,  preflightError: null,  wslOnly: false,}; describe("desktopWslState", () => {  it("retains the loaded snapshot when the settings screen remounts", async () => {    const getWslState = vi.fn(async () => wslState);    const atom = createDesktopWslStateAtom(() => ({ getWslState }));    const registry = AtomRegistry.make();     const unmount = registry.mount(atom);    await vi.waitFor(() => {      expect(AsyncResult.value(registry.get(atom))).toEqual(        expect.objectContaining({ _tag: "Some", value: wslState }),      );    });    unmount();     const remount = registry.mount(atom);    expect(AsyncResult.value(registry.get(atom))).toEqual(      expect.objectContaining({ _tag: "Some", value: wslState }),    );    expect(getWslState).toHaveBeenCalledTimes(1);     remount();    registry.dispose();  });   it("retains the desktop bridge failure as the load error cause", async () => {    const cause = new Error("wsl unavailable");    const atom = createDesktopWslStateAtom(() => ({      getWslState: async () => Promise.reject(cause),    }));    const registry = AtomRegistry.make();    registry.mount(atom);     await vi.waitFor(() => expect(AsyncResult.isFailure(registry.get(atom))).toBe(true));    const result = registry.get(atom);    if (!AsyncResult.isFailure(result)) throw new Error("Expected WSL state load to fail.");     expect(Cause.squash(result.cause)).toEqual(      expect.objectContaining({        _tag: "DesktopWslStateLoadError",        cause,      }),    );    registry.dispose();  });   it("replaces cached state with refreshed live desktop state", async () => {    const refreshedState: DesktopWslState = {      ...wslState,      preflightError: "WSL backend stopped unexpectedly.",    };    let currentState = wslState;    const getWslState = vi.fn(async () => currentState);    const atom = createDesktopWslStateAtom(() => ({ getWslState }));    const registry = AtomRegistry.make();    registry.mount(atom);     await vi.waitFor(() => {      expect(AsyncResult.value(registry.get(atom))).toEqual(        expect.objectContaining({ _tag: "Some", value: wslState }),      );    });     currentState = refreshedState;    registry.refresh(atom);     await vi.waitFor(() => {      expect(AsyncResult.value(registry.get(atom))).toEqual(        expect.objectContaining({ _tag: "Some", value: refreshedState }),      );    });    expect(getWslState).toHaveBeenCalledTimes(2);    registry.dispose();  });});