(null);
return (
{result !== null && {String(result)}}
);
}
// ---------------------------------------------------------------------------
// Tests
// ---------------------------------------------------------------------------
describe("useConfirm", () => {
it("throws when used outside provider", () => {
expect(() => {
renderHook(() => useConfirm());
}).toThrow("useConfirm must be used within a ");
});
it("returns a function when used inside provider", () => {
const { result } = renderHook(() => useConfirm(), { wrapper });
expect(typeof result.current).toBe("function");
});
it("confirm() returns a promise", () => {
const { result } = renderHook(() => useConfirm(), { wrapper });
let promise: Promise | undefined;
act(() => {
promise = result.current("Are you sure?");
});
expect(promise).toBeInstanceOf(Promise);
});
it("opens dialog with title and description when confirm is called", async () => {
render(
,
);
await act(async () => {
screen.getByText("Trigger").click();
});
expect(screen.getByText("Delete this?")).toBeDefined();
expect(screen.getByText("This action cannot be undone.")).toBeDefined();
expect(screen.getByText("Delete")).toBeDefined();
expect(screen.getByText("Keep")).toBeDefined();
});
it("resolves true when confirm button is clicked", async () => {
render(
,
);
await act(async () => {
screen.getByText("Trigger").click();
});
await act(async () => {
screen.getByText("Delete").click();
});
expect(screen.getByTestId("result").textContent).toBe("true");
});
it("resolves false when cancel button is clicked", async () => {
render(
,
);
await act(async () => {
screen.getByText("Trigger").click();
});
await act(async () => {
screen.getByText("Keep").click();
});
expect(screen.getByTestId("result").textContent).toBe("false");
});
});