/**
* @vitest-environment jsdom
*/
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { act, renderHook } from "@testing-library/react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import type { ReactNode } from "react";
import { setApiInstance } from "../api";
import type { ApiClient } from "../api/client";
import { setCurrentWorkspace } from "../platform/workspace-storage";
import {
getIssueSurfaceViewStore,
pruneIssueSurfaceViewStates,
} from "../issues/stores/surface-view-store";
import { useDeleteProject } from "./mutations";
vi.mock("../hooks", () => ({
useWorkspaceId: () => "ws-1",
}));
function createWrapper(qc: QueryClient) {
return function Wrapper({ children }: { children: ReactNode }) {
return {children};
};
}
describe("useDeleteProject", () => {
let qc: QueryClient;
let deleteProject: ReturnType Promise>>;
beforeEach(() => {
qc = new QueryClient({ defaultOptions: { queries: { retry: false } } });
deleteProject = vi.fn().mockResolvedValue(undefined);
setApiInstance({ deleteProject } as unknown as ApiClient);
setCurrentWorkspace("acme", "ws-1");
});
afterEach(() => {
qc.clear();
pruneIssueSurfaceViewStates([]);
setCurrentWorkspace(null, null);
vi.restoreAllMocks();
});
it("clears the deleted project's issue surface view state", async () => {
const store = getIssueSurfaceViewStore("project:p1");
store.getState().setViewMode("list");
expect(store.getState().viewMode).toBe("list");
const { result } = renderHook(() => useDeleteProject(), {
wrapper: createWrapper(qc),
});
await act(async () => {
await result.current.mutateAsync("p1");
});
expect(deleteProject).toHaveBeenCalledWith("p1");
expect(store.getState().viewMode).toBe("board");
});
});