UNPKG

@gravity-ui/graph

Version:

Modern graph editor component

63 lines (62 loc) 2.75 kB
import React, { createRef } from "react"; import { act, render, waitFor } from "@testing-library/react"; import { Graph } from "../graph"; import { GraphCanvas } from "./GraphCanvas"; import { GraphPortal } from "./GraphPortal"; describe("GraphPortal", () => { let graph; beforeEach(() => { graph = new Graph({}); }); afterEach(() => { act(() => { graph.stop(); graph?.unmount(); }); }); it("should render portal content when graph is ready", async () => { const { container } = render(React.createElement(GraphCanvas, { graph: graph, renderBlock: () => React.createElement("div", null, "Block") }, React.createElement(GraphPortal, null, React.createElement("div", { "data-testid": "portal-content" }, "Portal Content")))); // Start the graph to make it ready await act(async () => { graph.start(); }); // Wait for portal content to appear await waitFor(() => { expect(container.querySelector('[data-testid="portal-content"]')).not.toBeNull(); }); }); it("should provide layer instance through ref", async () => { const ref = createRef(); render(React.createElement(GraphCanvas, { graph: graph, renderBlock: () => React.createElement("div", null, "Block") }, React.createElement(GraphPortal, { ref: ref }, React.createElement("div", null, "Portal Content")))); // Start the graph to make it ready await act(async () => { graph.start(); }); // Wait for layer to be created await waitFor(() => { expect(ref.current).toBeDefined(); expect(ref.current.getPortalTarget).toBeDefined(); expect(typeof ref.current.getPortalTarget).toBe("function"); }); }); it("should render children as function with layer parameter", async () => { const childrenFn = jest.fn().mockReturnValue(React.createElement("div", null, "Function Content")); render(React.createElement(GraphCanvas, { graph: graph, renderBlock: () => React.createElement("div", null, "Block") }, React.createElement(GraphPortal, null, childrenFn))); // Start the graph to make it ready await act(async () => { graph.start(); }); // Wait for function to be called await waitFor(() => { expect(childrenFn).toHaveBeenCalled(); expect(childrenFn.mock.calls[0][0]).toBeDefined(); // layer expect(childrenFn.mock.calls[0][1]).toBeDefined(); // graph expect(childrenFn.mock.calls[0][0].getPortalTarget).toBeDefined(); }); }); });