/* * (c) Copyright 2026 Palantir Technologies Inc. All rights reserved. */ import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { useContext } from "react"; import { describe, expect, it, vi } from "@blueprintjs/test-commons/vitest"; import { BlueprintProvider } from "./blueprintProvider"; import { HotkeysContext } from "./hotkeys/hotkeysProvider"; import { PortalContext, type PortalContextOptions } from "./portal/portalProvider"; describe("BlueprintProvider", () => { it("renders children", () => { render( hello , ); expect(screen.getByText("hello")).toBeInTheDocument(); }); describe("PortalProvider", () => { it("forwards portalClassName to PortalProvider", () => { const PortalContextConsumer = () => { const { portalClassName } = useContext(PortalContext); return ; }; render( , ); expect(screen.getByTestId("portal-class")).toHaveClass("my-portal"); }); it("forwards portalContainer to PortalProvider", () => { const container = document.createElement("div"); let receivedContainer: HTMLElement | undefined; const PortalContainerConsumer = () => { const { portalContainer } = useContext(PortalContext); receivedContainer = portalContainer; return null; }; render( , ); expect(receivedContainer).toBe(container); }); it("does not forward hotkeys props to PortalProvider", () => { let receivedContext: PortalContextOptions | undefined; const PortalContextSpy = () => { const ctx = useContext(PortalContext); receivedContext = ctx; return null; }; render( , ); expect(receivedContext).toBeDefined(); expect(receivedContext).not.toHaveProperty("hotkeysProviderDialogProps"); expect(receivedContext!.portalClassName).toBe("portal-only"); expect(Object.keys(receivedContext!)).toEqual( expect.objectContaining(["portalClassName", "portalContainer"]), ); }); }); describe("HotkeysProvider", () => { // Test helper that reads HotkeysContext and provides a button to open the dialog. const HotkeysDialogTrigger = () => { const [_, dispatch] = useContext(HotkeysContext); return ( ); }; it("forwards hotkeysProviderRenderDialog to HotkeysProvider", () => { const renderDialog = vi.fn(() =>
); render( , ); // renderDialog is called on every render with current state expect(renderDialog).toHaveBeenCalledOnce(); expect(screen.getByTestId("custom-dialog")).toBeInTheDocument(); }); it("forwards hotkeysProviderDialogProps to HotkeysProvider", async () => { const user = userEvent.setup(); render( , ); // Open the dialog so HotkeysDialog renders via Overlay2 await user.click(screen.getByTestId("open-dialog")); expect(document.querySelector(".my-hotkeys-dialog")).toBeInTheDocument(); }); it("uses provided dispatch from hotkeysProviderValue", async () => { const user = userEvent.setup(); const state = { hasProvider: true, hotkeys: [], isDialogOpen: false }; const dispatch = vi.fn(); const contextValue = [state, dispatch] as const; render( , ); await user.click(screen.getByTestId("open-dialog")); expect(dispatch).toHaveBeenCalledWith({ type: "OPEN_DIALOG" }); }); }); });