55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { render, screen } from "@testing-library/react";
|
|
import userEvent from "@testing-library/user-event";
|
|
import { ArtifactGateWidget } from "./ArtifactGateWidget";
|
|
|
|
test("renders artifact content in a pre block", () => {
|
|
const onRespond = vi.fn();
|
|
render(
|
|
<ArtifactGateWidget
|
|
descriptor={{
|
|
id: "u1",
|
|
widget: "artifact-gate",
|
|
artifact: { kind: "cte", content: "SELECT 42" },
|
|
options: [{ id: "approve", label: "Approva" }],
|
|
}}
|
|
onRespond={onRespond}
|
|
/>
|
|
);
|
|
expect(screen.getByText("SELECT 42")).toBeInTheDocument();
|
|
});
|
|
|
|
test("clicking an option without opens responds immediately", async () => {
|
|
const onRespond = vi.fn();
|
|
render(
|
|
<ArtifactGateWidget
|
|
descriptor={{
|
|
id: "u1",
|
|
widget: "artifact-gate",
|
|
artifact: { kind: "cte", content: "SELECT 1" },
|
|
options: [{ id: "approve", label: "Approva" }],
|
|
}}
|
|
onRespond={onRespond}
|
|
/>
|
|
);
|
|
await userEvent.click(screen.getByRole("button", { name: /Approva/ }));
|
|
expect(onRespond).toHaveBeenCalledWith({ id: "u1", kind: "artifact-gate", choices: ["approve"] });
|
|
});
|
|
|
|
test("reserved control responds with control field", async () => {
|
|
const onRespond = vi.fn();
|
|
render(
|
|
<ArtifactGateWidget
|
|
descriptor={{
|
|
id: "u1",
|
|
widget: "artifact-gate",
|
|
artifact: { kind: "cte", content: "SELECT 1" },
|
|
options: [{ id: "approve", label: "Approva" }],
|
|
reserved: ["back"],
|
|
}}
|
|
onRespond={onRespond}
|
|
/>
|
|
);
|
|
await userEvent.click(screen.getByRole("button", { name: /indietro/i }));
|
|
expect(onRespond).toHaveBeenCalledWith({ id: "u1", control: "back" });
|
|
});
|