48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import React from "react";
|
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
import { ThemeProvider, createTheme } from "@mui/material/styles";
|
|
|
|
import { PermissionRequestGroup } from "./AgentPermissionRequests";
|
|
|
|
jest.mock("framer-motion", () => ({
|
|
AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}</>,
|
|
motion: {
|
|
div: ({ children, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
|
|
<div {...props}>{children}</div>
|
|
),
|
|
},
|
|
}));
|
|
|
|
describe("PermissionRequestGroup", () => {
|
|
it("shows an external path approval request and forwards the user's decision", () => {
|
|
const onReply = jest.fn();
|
|
render(
|
|
<ThemeProvider theme={createTheme()}>
|
|
<PermissionRequestGroup
|
|
permissions={[
|
|
{
|
|
requestId: "external-1",
|
|
sessionId: "session-1",
|
|
permission: "external_directory",
|
|
patterns: ["/app/private/*"],
|
|
target: "/app/private/report.json",
|
|
always: ["/app/private/*"],
|
|
createdAt: 1,
|
|
status: "pending",
|
|
},
|
|
]}
|
|
isRunning
|
|
onReply={onReply}
|
|
/>
|
|
</ThemeProvider>,
|
|
);
|
|
|
|
expect(screen.getByText("访问工作区外目录")).toBeInTheDocument();
|
|
expect(screen.getByText("/app/private/report.json")).toBeInTheDocument();
|
|
fireEvent.click(screen.getByRole("button", { name: "允许一次" }));
|
|
expect(onReply).toHaveBeenCalledWith("external-1", "once");
|
|
fireEvent.click(screen.getByRole("button", { name: "保存授权" }));
|
|
expect(onReply).toHaveBeenCalledWith("external-1", "always");
|
|
});
|
|
});
|