Files
homelable/frontend/src/components/modals/__tests__/ShortcutsModal.test.tsx
T
Pouzor ba032a45af feat: canvas history (undo/redo), copy/paste nodes, node search, shortcuts modal
- Undo/Redo (Ctrl+Z / Ctrl+Y): 50-entry snapshot stack in canvasStore; snapshot before all mutations and on node drag stop
- Copy/Paste (Ctrl+C / Ctrl+V): copy selected nodes to clipboard, paste with +50px offset and new IDs
- Node search (Ctrl+K): spotlight overlay — fuzzy search by label/IP/hostname, jumps + focuses matched node
- Shortcuts modal (?): lists all keyboard shortcuts, accessible via ? key or toolbar ? button
- Toolbar: undo/redo buttons (disabled when stack empty), ? help button
2026-03-12 11:56:38 +01:00

39 lines
1.4 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest'
import { render, screen, fireEvent } from '@testing-library/react'
import { ShortcutsModal } from '../ShortcutsModal'
describe('ShortcutsModal', () => {
it('renders nothing when closed', () => {
const { container } = render(<ShortcutsModal open={false} onClose={vi.fn()} />)
expect(container.firstChild).toBeNull()
})
it('renders shortcut groups when open', () => {
render(<ShortcutsModal open={true} onClose={vi.fn()} />)
expect(screen.getByText('Keyboard Shortcuts')).toBeDefined()
expect(screen.getByText('Canvas')).toBeDefined()
expect(screen.getByText('Nodes')).toBeDefined()
expect(screen.getByText('Navigation')).toBeDefined()
})
it('shows key shortcuts in kbd elements', () => {
render(<ShortcutsModal open={true} onClose={vi.fn()} />)
expect(screen.getAllByText('Ctrl').length).toBeGreaterThan(0)
})
it('calls onClose when backdrop clicked', () => {
const onClose = vi.fn()
const { container } = render(<ShortcutsModal open={true} onClose={onClose} />)
fireEvent.click(container.firstChild as HTMLElement)
expect(onClose).toHaveBeenCalled()
})
it('calls onClose when X button clicked', () => {
const onClose = vi.fn()
render(<ShortcutsModal open={true} onClose={onClose} />)
const buttons = screen.getAllByRole('button')
fireEvent.click(buttons[0])
expect(onClose).toHaveBeenCalled()
})
})