diff --git a/web/app/components/workflow/__tests__/keyboard-node-movement.browser.spec.tsx b/web/app/components/workflow/__tests__/keyboard-node-movement.browser.spec.tsx new file mode 100644 index 00000000000..92f1284f4ab --- /dev/null +++ b/web/app/components/workflow/__tests__/keyboard-node-movement.browser.spec.tsx @@ -0,0 +1,162 @@ +import type { NodeProps } from 'reactflow' +import { useState } from 'react' +import ReactFlow, { Handle, Position, ReactFlowProvider, useStoreApi } from 'reactflow' +import { page, userEvent } from 'vite-plus/test/browser' +import { render } from 'vitest-browser-react' +import { WorkflowContext } from '../context' +import { useNodeKeyboardInteractions } from '../hooks/use-node-keyboard-interactions' +import { createWorkflowStore } from '../store/workflow' +import 'reactflow/dist/style.css' +import '../style.css' + +vi.mock('../hooks/use-workflow', () => ({ + useNodesReadOnly: () => ({ getNodesReadOnly: () => false }), +})) +vi.mock('../hooks/use-nodes-sync-draft', () => ({ + useNodesSyncDraft: () => ({ handleSyncWorkflowDraft: vi.fn() }), +})) +vi.mock('../hooks/use-workflow-history', () => ({ + WorkflowHistoryEvent: { NodeDragStop: 'NodeDragStop' }, + useWorkflowHistory: () => ({ saveStateToHistory: vi.fn() }), +})) +vi.mock('../collaboration/core/collaboration-manager', () => ({ + collaborationManager: { + setNodes: vi.fn(), + setEdges: vi.fn(), + canApplyLocalGraphMutation: () => true, + }, +})) + +const nodes = [ + { + id: 'node', + type: 'test', + ariaLabel: 'Code', + position: { x: 100, y: 100 }, + data: { title: 'Code' }, + }, + { + id: 'output', + type: 'test', + ariaLabel: 'Output', + position: { x: 500, y: 200 }, + data: { title: 'Output' }, + }, +] +const edges = [{ id: 'connection', source: 'node', target: 'output', type: 'straight' }] +function TestNode({ id, data }: NodeProps) { + const store = useStoreApi() + return ( +
+ + +