feat(frontend): multiselect/artifact-gate/artifact widgets + linkage + no-limbo
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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" });
|
||||
});
|
||||
Reference in New Issue
Block a user