import { ApprovalRequestId } from "@t3tools/contracts";
import { renderToStaticMarkup } from "react-dom/server";
import { describe, expect, it } from "vite-plus/test";
import { ComposerPendingApprovalPanel } from "./ComposerPendingApprovalPanel";
describe("ComposerPendingApprovalPanel", () => {
it("keeps the complete command readable in the compact row", () => {
const detail = `bun run release -- ${"x".repeat(500)}\nsecond line`;
const markup = renderToStaticMarkup(
,
);
expect(markup).toContain('data-approval-detail="complete"');
expect(markup).toContain('aria-label="Command"');
expect(markup).toContain('role="group"');
expect(markup).toContain('tabindex="0"');
expect(markup).toContain(detail);
expect(markup).toContain("max-h-20");
expect(markup).toContain("overflow-auto");
expect(markup).toContain("whitespace-pre");
expect(markup).toContain("[scrollbar-width:thin]");
expect(markup).toContain("[&::-webkit-scrollbar]:h-1.5");
expect(markup).not.toContain("truncate");
expect(markup).not.toContain("line-clamp");
expect(markup).toContain("min-w-0");
expect(markup).not.toContain("Command approval requested");
});
it("falls back to the approval kind when the provider sends an empty detail", () => {
const markup = renderToStaticMarkup(
,
);
expect(markup).toContain("File read approval");
});
it("shows the app name and message for an MCP access request", () => {
const markup = renderToStaticMarkup(
,
);
expect(markup).toContain('aria-label="App access approval"');
expect(markup).toContain('aria-label="App access request"');
expect(markup).toContain(">Safari<");
expect(markup).toContain("Allow ChatGPT to use Safari?");
});
it("limits long app names so the complete approval message stays readable", () => {
const appName = "A".repeat(200);
const detail = "Allow ChatGPT to access the selected application?";
const markup = renderToStaticMarkup(
,
);
expect(markup).toContain("max-w-32 shrink truncate");
expect(markup).toContain(appName);
expect(markup).toContain('data-approval-detail="complete"');
expect(markup).toContain(detail);
});
});