import { render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, test, vi } from "vitest";
import { PERMISSIONS } from "@/app/permissions";
import { DashboardWorkspaces } from "./DashboardWorkspaces.jsx";
const can = vi.fn();
vi.mock("@/app/auth/AuthProvider.jsx", () => ({
useAuth: () => ({ can }),
}));
describe("DashboardWorkspaces", () => {
beforeEach(() => {
can.mockReset();
});
test("shows each workspace only when its existing permission is granted", () => {
can.mockImplementation((permission) => permission === PERMISSIONS.financeView);
render();
expect(screen.getByRole("link", { name: /财务工作台/ })).toHaveAttribute("href", "/finance/");
expect(screen.queryByRole("link", { name: /运营工作台/ })).not.toBeInTheDocument();
});
test("routes the operations workspace to the Social BI document entry", () => {
can.mockImplementation((permission) => permission === PERMISSIONS.overviewView);
render();
expect(screen.getByRole("link", { name: /运营工作台/ })).toHaveAttribute("href", "/databi/social/");
expect(screen.queryByRole("link", { name: /财务工作台/ })).not.toBeInTheDocument();
});
test("shows the finance document entry to withdrawal operations reviewers", () => {
can.mockImplementation((permission) => permission === PERMISSIONS.operationsWithdrawalAudit);
render();
expect(screen.getByRole("link", { name: /财务工作台/ })).toHaveAttribute("href", "/finance/");
});
test.each([PERMISSIONS.financeWithdrawalView, PERMISSIONS.financeWithdrawalAudit])(
"shows the finance document entry to finance withdrawal roles with %s",
(grantedPermission) => {
can.mockImplementation((permission) => permission === grantedPermission);
render();
expect(screen.getByRole("link", { name: /财务工作台/ })).toHaveAttribute("href", "/finance/");
},
);
});