import {
cleanup,
fireEvent,
render,
screen,
waitFor,
} from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { createRef } from "react";
import assert from "node:assert";
import {
afterEach,
describe,
mock,
test,
} from "node:test";
import { MapPanel } from "./MapPanel";
import { MapContext } from "../context";
const Inner = ({ data }: { data?: { id?: string; }; }) =>
{data?.id ?? ""}
;
const getContextValue = ({
panelData = null,
onAction = null,
}: {
panelData?: unknown;
onAction?: unknown;
}) => ({
getCN: (_el: string) => "",
instanceRef: createRef(),
containerRef: createRef(),
balloonRef: createRef(),
maxActivePoints: 1,
modules: {},
zoom: 10,
options: {},
api: {
load: [],
key: "",
},
currentClusters: [],
clusters: [],
panelData,
onAction,
stateActions: {
setIsDisabled: () => {},
setClusters: () => {},
setPanelData: () => {},
setPointState: () => {},
},
});
describe("MapPanel", () => {
afterEach(() => {
cleanup();
});
test("opens when panelData is provided", async () => {
const onAction = mock.fn();
const { rerender } = render(
);
assert.strictEqual(screen.queryByTestId("panel-content"), null);
rerender(
);
await waitFor(() => {
assert.notStrictEqual(screen.queryByTestId("panel-content"), null);
assert.strictEqual(screen.getByTestId("panel-content").textContent, "point-1");
assert.strictEqual(
onAction.mock.calls.some((call) => call.arguments?.[0]?.getData?.()?.type === "panelOpen"), true
);
});
});
test("closes on close button click", async () => {
const user = userEvent.setup();
const onAction = mock.fn();
const { rerender } = render(
);
rerender(
);
await waitFor(() => {
assert.notStrictEqual(screen.queryByTestId("panel-content"), null);
});
await user.click(screen.getByRole("button"));
const panelNode = screen.queryByTestId("panel-content")?.closest("aside") as HTMLElement | null;
assert.notStrictEqual(panelNode, null);
fireEvent.transitionEnd(panelNode as HTMLElement);
await waitFor(() => {
assert.strictEqual(screen.queryByTestId("panel-content"), null);
assert.strictEqual(
onAction.mock.calls.some((call) => call.arguments?.[0]?.getData?.()?.type === "panelClose"), true
);
});
});
});