135 lines · 3.9 KB · TypeScript
RawDownload
import { QueryClient } from "@tanstack/react-query";import { describe, expect, it, vi } from "vitest"; vi.mock("../environmentApi", () => ({  ensureEnvironmentApi: vi.fn(),})); vi.mock("../wsRpcClient", () => ({  getWsRpcClient: vi.fn(),  getWsRpcClientForEnvironment: vi.fn(),})); import type { InfiniteData } from "@tanstack/react-query";import { EnvironmentId, type VcsListRefsResult } from "@t3tools/contracts"; import {  gitBranchSearchInfiniteQueryOptions,  gitMutationKeys,  gitPreparePullRequestThreadMutationOptions,  gitPullMutationOptions,  gitRunStackedActionMutationOptions,  invalidateGitQueries,} from "./gitReactQuery"; const BRANCH_QUERY_RESULT: VcsListRefsResult = {  refs: [],  isRepo: true,  hasPrimaryRemote: true,  nextCursor: null,  totalCount: 0,}; const BRANCH_SEARCH_RESULT: InfiniteData<VcsListRefsResult, number> = {  pages: [BRANCH_QUERY_RESULT],  pageParams: [0],};const ENVIRONMENT_A = EnvironmentId.make("environment-a");const ENVIRONMENT_B = EnvironmentId.make("environment-b"); describe("gitMutationKeys", () => {  it("scopes stacked action keys by cwd", () => {    expect(gitMutationKeys.runStackedAction(ENVIRONMENT_A, "/repo/a")).not.toEqual(      gitMutationKeys.runStackedAction(ENVIRONMENT_A, "/repo/b"),    );  });   it("scopes pull keys by cwd", () => {    expect(gitMutationKeys.pull(ENVIRONMENT_A, "/repo/a")).not.toEqual(      gitMutationKeys.pull(ENVIRONMENT_A, "/repo/b"),    );  });   it("scopes pull request thread preparation keys by cwd", () => {    expect(gitMutationKeys.preparePullRequestThread(ENVIRONMENT_A, "/repo/a")).not.toEqual(      gitMutationKeys.preparePullRequestThread(ENVIRONMENT_A, "/repo/b"),    );  });}); describe("git mutation options", () => {  const queryClient = new QueryClient();   it("attaches cwd-scoped mutation key for runStackedAction", () => {    const options = gitRunStackedActionMutationOptions({      environmentId: ENVIRONMENT_A,      cwd: "/repo/a",      queryClient,    });    expect(options.mutationKey).toEqual(gitMutationKeys.runStackedAction(ENVIRONMENT_A, "/repo/a"));  });   it("attaches cwd-scoped mutation key for pull", () => {    const options = gitPullMutationOptions({      environmentId: ENVIRONMENT_A,      cwd: "/repo/a",      queryClient,    });    expect(options.mutationKey).toEqual(gitMutationKeys.pull(ENVIRONMENT_A, "/repo/a"));  });   it("attaches cwd-scoped mutation key for preparePullRequestThread", () => {    const options = gitPreparePullRequestThreadMutationOptions({      environmentId: ENVIRONMENT_A,      cwd: "/repo/a",      queryClient,    });    expect(options.mutationKey).toEqual(      gitMutationKeys.preparePullRequestThread(ENVIRONMENT_A, "/repo/a"),    );  });}); describe("invalidateGitQueries", () => {  it("can invalidate a single cwd without blasting other git query scopes", async () => {    const queryClient = new QueryClient();     queryClient.setQueryData(      gitBranchSearchInfiniteQueryOptions({        environmentId: ENVIRONMENT_A,        cwd: "/repo/a",        query: "feature",      }).queryKey,      BRANCH_SEARCH_RESULT,    );    queryClient.setQueryData(      gitBranchSearchInfiniteQueryOptions({        environmentId: ENVIRONMENT_B,        cwd: "/repo/b",        query: "feature",      }).queryKey,      BRANCH_SEARCH_RESULT,    );     await invalidateGitQueries(queryClient, { environmentId: ENVIRONMENT_A, cwd: "/repo/a" });     expect(      queryClient.getQueryState(        gitBranchSearchInfiniteQueryOptions({          environmentId: ENVIRONMENT_A,          cwd: "/repo/a",          query: "feature",        }).queryKey,      )?.isInvalidated,    ).toBe(true);    expect(      queryClient.getQueryState(        gitBranchSearchInfiniteQueryOptions({          environmentId: ENVIRONMENT_B,          cwd: "/repo/b",          query: "feature",        }).queryKey,      )?.isInvalidated,    ).toBe(false);  });});