Files
tolaria/src/hooks/useCommandRegistry.editorFind.test.ts

77 lines
2.5 KiB
TypeScript
Raw Normal View History

2026-04-27 10:12:13 +02:00
import { renderHook } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { useCommandRegistry } from './useCommandRegistry'
function makeConfig(overrides: Record<string, unknown> = {}) {
return {
activeNoteModified: false,
activeTabPath: '/vault/a.md',
entries: [{ path: '/vault/a.md', title: 'A', fileKind: 'markdown' }],
modifiedCount: 0,
onArchiveNote: vi.fn(),
onCreateNote: vi.fn(),
onCreateNoteOfType: vi.fn(),
onDeleteNote: vi.fn(),
onFindInNote: vi.fn(),
onOpenSettings: vi.fn(),
onQuickOpen: vi.fn(),
onReplaceInNote: vi.fn(),
onSave: vi.fn(),
onSelect: vi.fn(),
onSetViewMode: vi.fn(),
onToggleInspector: vi.fn(),
onUnarchiveNote: vi.fn(),
onZoomIn: vi.fn(),
onZoomOut: vi.fn(),
onZoomReset: vi.fn(),
zoomLevel: 100,
...overrides,
}
}
describe('useCommandRegistry editor find commands', () => {
it('exposes note-scoped find and replace commands', () => {
const config = makeConfig()
const { result } = renderHook(() => useCommandRegistry(config))
const find = result.current.find((command) => command.id === 'find-in-note')
const replace = result.current.find((command) => command.id === 'replace-in-note')
expect(find).toMatchObject({
enabled: true,
group: 'Note',
label: 'Find in Note',
shortcut: 'Ctrl+F',
})
expect(replace).toMatchObject({
enabled: true,
group: 'Note',
label: 'Replace in Note',
})
find?.execute()
replace?.execute()
expect(config.onFindInNote).toHaveBeenCalledOnce()
expect(config.onReplaceInNote).toHaveBeenCalledOnce()
})
it('disables note find for binary files', () => {
const config = makeConfig({
activeTabPath: '/vault/photo.png',
entries: [{ path: '/vault/photo.png', title: 'photo.png', fileKind: 'binary' }],
})
const { result } = renderHook(() => useCommandRegistry(config))
expect(result.current.find((command) => command.id === 'find-in-note')?.enabled).toBe(false)
expect(result.current.find((command) => command.id === 'replace-in-note')?.enabled).toBe(false)
})
it('disables note find until a note is active', () => {
const config = makeConfig({ activeTabPath: null })
const { result } = renderHook(() => useCommandRegistry(config))
expect(result.current.find((command) => command.id === 'find-in-note')?.enabled).toBe(false)
expect(result.current.find((command) => command.id === 'replace-in-note')?.enabled).toBe(false)
})
})