Julius Marmingefeat(scm): Gitlab (#2462)0ce7e566 months agoHistory
105 lines · 2.5 KB · TypeScript
RawDownload
import type {  VcsStatusLocalResult,  VcsStatusRemoteResult,  VcsStatusStreamEvent,} from "@t3tools/contracts";import { describe, expect, it, vi } from "vitest"; vi.mock("./wsTransport", () => ({  WsTransport: class WsTransport {    dispose = vi.fn(async () => undefined);    reconnect = vi.fn(async () => undefined);    request = vi.fn();    requestStream = vi.fn();    subscribe = vi.fn(() => () => undefined);  },})); import { createWsRpcClient } from "./wsRpcClient";import { type WsTransport } from "./wsTransport"; const baseLocalStatus: VcsStatusLocalResult = {  isRepo: true,  hasPrimaryRemote: true,  isDefaultRef: false,  refName: "feature/demo",  hasWorkingTreeChanges: false,  workingTree: { files: [], insertions: 0, deletions: 0 },}; const baseRemoteStatus: VcsStatusRemoteResult = {  hasUpstream: true,  aheadCount: 0,  behindCount: 0,  pr: null,}; describe("wsRpcClient", () => {  it("reduces vcs status stream events into flat status snapshots", () => {    const subscribe = vi.fn(<TValue>(_connect: unknown, listener: (value: TValue) => void) => {      for (const event of [        {          _tag: "snapshot",          local: baseLocalStatus,          remote: null,        },        {          _tag: "remoteUpdated",          remote: baseRemoteStatus,        },        {          _tag: "localUpdated",          local: {            ...baseLocalStatus,            hasWorkingTreeChanges: true,          },        },      ] satisfies VcsStatusStreamEvent[]) {        listener(event as TValue);      }      return () => undefined;    });     const transport = {      dispose: vi.fn(async () => undefined),      reconnect: vi.fn(async () => undefined),      request: vi.fn(),      requestStream: vi.fn(),      subscribe,    } satisfies Pick<      WsTransport,      "dispose" | "reconnect" | "request" | "requestStream" | "subscribe"    >;     const client = createWsRpcClient(transport as unknown as WsTransport);    const listener = vi.fn();     client.vcs.onStatus({ cwd: "/repo" }, listener);     expect(listener.mock.calls).toEqual([      [        {          ...baseLocalStatus,          hasUpstream: false,          aheadCount: 0,          behindCount: 0,          aheadOfDefaultCount: 0,          pr: null,        },      ],      [        {          ...baseLocalStatus,          ...baseRemoteStatus,        },      ],      [        {          ...baseLocalStatus,          ...baseRemoteStatus,          hasWorkingTreeChanges: true,        },      ],    ]);  });});