@gravity-ui/graph
Version:
Modern graph editor component
63 lines (62 loc) • 2.75 kB
JavaScript
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();
});
});
});