309 lines · 8.0 KB · TypeScript
RawDownload
import { assert, beforeEach, it } from "vite-plus/test";import type { SourceControlDiscoveryResult } from "@t3tools/contracts";import * as Option from "effect/Option";import { AtomRegistry } from "effect/unstable/reactivity"; import {  EMPTY_SOURCE_CONTROL_DISCOVERY_STATE,  createSourceControlDiscoveryManager,} from "./sourceControlDiscoveryState.ts"; const EMPTY_RESULT: SourceControlDiscoveryResult = {  versionControlSystems: [],  sourceControlProviders: [],}; const GITHUB_RESULT: SourceControlDiscoveryResult = {  versionControlSystems: [    {      kind: "git",      label: "Git",      implemented: true,      status: "available",      version: Option.some("2.51.0"),      installHint: "Install Git.",      detail: Option.none(),    },  ],  sourceControlProviders: [    {      kind: "github",      label: "GitHub",      status: "available",      version: Option.some("2.85.0"),      installHint: "Install GitHub CLI.",      detail: Option.none(),      auth: {        status: "authenticated",        account: Option.some("octo"),        host: Option.some("github.com"),        detail: Option.none(),      },    },  ],}; function unresolvedDiscovery() {  throw new Error("Discovery resolver was not initialized.");} let registry = AtomRegistry.make(); const noop = () => undefined; beforeEach(() => {  registry.dispose();  registry = AtomRegistry.make();}); function flushAsyncWork(): Promise<void> {  return Promise.resolve().then(() => undefined);} it("stores refreshed discovery data in an atom snapshot", async () => {  const manager = createSourceControlDiscoveryManager({    getRegistry: () => registry,    getClient: () => ({      discoverSourceControl: async () => EMPTY_RESULT,    }),  });   assert.deepStrictEqual(manager.getSnapshot({ key: null }), EMPTY_SOURCE_CONTROL_DISCOVERY_STATE);   const result = await manager.refresh({ key: "primary" });   assert.strictEqual(result, EMPTY_RESULT);  assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: EMPTY_RESULT,    error: null,    isPending: false,  });}); it("deduplicates in-flight discovery refreshes by target key", async () => {  let resolveDiscovery: (result: SourceControlDiscoveryResult) => void = unresolvedDiscovery;  let calls = 0;  const manager = createSourceControlDiscoveryManager({    getRegistry: () => registry,    getClient: () => ({      discoverSourceControl: () => {        calls += 1;        return new Promise<SourceControlDiscoveryResult>((resolve) => {          resolveDiscovery = resolve;        });      },    }),  });   const first = manager.refresh({ key: "primary" });  const second = manager.refresh({ key: "primary" });   assert.strictEqual(first, second);  assert.strictEqual(calls, 1);  assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: null,    error: null,    isPending: true,  });   resolveDiscovery(EMPTY_RESULT);  await first;   assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: EMPTY_RESULT,    error: null,    isPending: false,  });}); it("keeps the previous snapshot when refresh fails", async () => {  let shouldFail = false;  const manager = createSourceControlDiscoveryManager({    getRegistry: () => registry,    getClient: () => ({      discoverSourceControl: async () => {        if (shouldFail) {          throw new Error("probe failed");        }        return EMPTY_RESULT;      },    }),  });   await manager.refresh({ key: "primary" });  shouldFail = true;   const result = await manager.refresh({ key: "primary" });   assert.strictEqual(result, EMPTY_RESULT);  assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: EMPTY_RESULT,    error: "probe failed",    isPending: false,  });}); it("invalidates a discovery target back to the initial snapshot", async () => {  const manager = createSourceControlDiscoveryManager({    getRegistry: () => registry,    getClient: () => ({      discoverSourceControl: async () => GITHUB_RESULT,    }),  });   await manager.refresh({ key: "primary" });  manager.invalidate({ key: "primary" });   assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: null,    error: null,    isPending: true,  });}); it("ignores an in-flight refresh after the target is invalidated", async () => {  let resolveDiscovery: (result: SourceControlDiscoveryResult) => void = unresolvedDiscovery;  const manager = createSourceControlDiscoveryManager({    getRegistry: () => registry,    getClient: () => ({      discoverSourceControl: () =>        new Promise<SourceControlDiscoveryResult>((resolve) => {          resolveDiscovery = resolve;        }),    }),  });   const refresh = manager.refresh({ key: "primary" });  manager.invalidate({ key: "primary" });  resolveDiscovery(GITHUB_RESULT);   const result = await refresh;   assert.strictEqual(result, GITHUB_RESULT);  assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: null,    error: null,    isPending: true,  });}); it("watches a discovery target with ref-counted client-change subscriptions", async () => {  let listener: () => void = noop;  let subscribeCalls = 0;  let unsubscribeCalls = 0;  let discoveryCalls = 0;  const client = {    discoverSourceControl: async () => {      discoveryCalls += 1;      return EMPTY_RESULT;    },  };  const manager = createSourceControlDiscoveryManager({    getRegistry: () => registry,    getClient: () => client,    subscribeClientChanges: (nextListener) => {      subscribeCalls += 1;      listener = nextListener;      return () => {        unsubscribeCalls += 1;      };    },  });   const firstUnwatch = manager.watch({ key: "primary" });  const secondUnwatch = manager.watch({ key: "primary" });  await flushAsyncWork();   assert.strictEqual(subscribeCalls, 1);  assert.strictEqual(discoveryCalls, 1);  assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: EMPTY_RESULT,    error: null,    isPending: false,  });   listener();  await flushAsyncWork();  assert.strictEqual(discoveryCalls, 1);   firstUnwatch();  assert.strictEqual(unsubscribeCalls, 0);   secondUnwatch();  assert.strictEqual(unsubscribeCalls, 1);}); it("reuses fresh watched discovery results on remount", async () => {  let discoveryCalls = 0;  const client = {    discoverSourceControl: async () => {      discoveryCalls += 1;      return EMPTY_RESULT;    },  };  const manager = createSourceControlDiscoveryManager({    getRegistry: () => registry,    getClient: () => client,    staleTimeMs: 60_000,  });   const firstUnwatch = manager.watch({ key: "primary" });  await flushAsyncWork();  firstUnwatch();   const secondUnwatch = manager.watch({ key: "primary" });  await flushAsyncWork();  secondUnwatch();   assert.strictEqual(discoveryCalls, 1);}); it("refreshes a watched discovery target when the resolved client is replaced", async () => {  let listener: () => void = noop;  let activeResult = EMPTY_RESULT;  let discoveryCalls = 0;  const firstClient = {    discoverSourceControl: async () => {      discoveryCalls += 1;      return activeResult;    },  };  const secondClient = {    discoverSourceControl: async () => {      discoveryCalls += 1;      return activeResult;    },  };  let activeClient = firstClient;  const manager = createSourceControlDiscoveryManager({    getRegistry: () => registry,    getClient: () => activeClient,    subscribeClientChanges: (nextListener) => {      listener = nextListener;      return () => undefined;    },  });   const unwatch = manager.watch({ key: "primary" });  await flushAsyncWork();   assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: EMPTY_RESULT,    error: null,    isPending: false,  });   activeClient = secondClient;  activeResult = GITHUB_RESULT;  listener();  await flushAsyncWork();   assert.strictEqual(discoveryCalls, 2);  assert.deepStrictEqual(manager.getSnapshot({ key: "primary" }), {    data: GITHUB_RESULT,    error: null,    isPending: false,  });   unwatch();});