Files
lemonspace_app/components/canvas/__tests__/canvas-connection-drop-menu.test.tsx
Matthias Meister 7c34da45b4 feat(canvas): enhance edge insertion and local node data handling
- Added support for new edge insertion features, including default edge types and improved layout calculations.
- Introduced local node data persistence during flow reconciliation to ensure data integrity.
- Updated connection drop menu to handle edge insertions and node interactions more effectively.
- Enhanced testing for edge insert layout and local node data management.
2026-04-05 21:26:20 +02:00

86 lines
2.4 KiB
TypeScript

// @vitest-environment jsdom
import React from "react";
import { act } from "react";
import { createRoot, type Root } from "react-dom/client";
import { afterEach, describe, expect, it, vi } from "vitest";
import { CanvasConnectionDropMenu } from "@/components/canvas/canvas-connection-drop-menu";
import type { CanvasNodeTemplate } from "@/lib/canvas-node-templates";
vi.mock("@/components/ui/command", () => ({
Command: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
CommandEmpty: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
CommandInput: () => <input aria-label="command-input" />,
CommandList: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
}));
vi.mock("@/components/canvas/canvas-node-template-picker", () => ({
CanvasNodeTemplatePicker: ({
onPick,
}: {
onPick: (template: CanvasNodeTemplate) => void;
}) => (
<button
type="button"
data-testid="pick-template"
onClick={() => onPick({ type: "note", label: "Notiz" } as CanvasNodeTemplate)}
>
pick
</button>
),
}));
(globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true;
describe("CanvasConnectionDropMenu", () => {
let root: Root | null = null;
let container: HTMLDivElement | null = null;
afterEach(() => {
if (root) {
act(() => {
root?.unmount();
});
}
container?.remove();
root = null;
container = null;
vi.restoreAllMocks();
});
it("renders using a generic anchor and forwards template picks", () => {
const onPick = vi.fn<(template: CanvasNodeTemplate) => void>();
const onClose = vi.fn();
container = document.createElement("div");
document.body.appendChild(container);
root = createRoot(container);
act(() => {
root?.render(
<CanvasConnectionDropMenu
anchor={{ screenX: 140, screenY: 200 }}
onClose={onClose}
onPick={onPick}
/>,
);
});
const dialog = document.querySelector('[role="dialog"]');
expect(dialog).not.toBeNull();
const pickButton = document.querySelector('[data-testid="pick-template"]');
if (!(pickButton instanceof HTMLButtonElement)) {
throw new Error("Template pick button was not rendered");
}
act(() => {
pickButton.click();
});
expect(onPick).toHaveBeenCalledTimes(1);
expect(onClose).toHaveBeenCalledTimes(1);
});
});