clone

a browser-first diagram editor with live svg previews, local drafts and encrypted, accountless sharing

main
diagramzip / apps / editor / test / command-palette.test.js
command-palette.test.js 2.3K
1import assert from 'node:assert/strict'2import test from 'node:test'3import { createCommandPaletteModel, flattenCommandGroups } from '../src/command-palette.js'45const commands = [6 { id: 'open', label: 'Open File', description: 'Open a diagram', keywords: ['load'], shortcut: '⌘O', run: () => 'open' },7 { id: 'disabled', label: 'Open Recent', disabled: true },8 { id: 'save', label: 'Save File', keywords: 'persist', shortcut: '⌘S', run: () => 'save' },9 { id: 'export', label: 'Export SVG', description: 'Download image', run: () => 'export' },10]1112test('flattens groups in stable order', () => {13 assert.deepEqual(flattenCommandGroups([14 { id: 'files', commands: commands.slice(0, 2) },15 { id: 'share', commands: commands.slice(2) },16 ]), commands)17})1819test('filters case-insensitively by all query tokens across command fields', () => {20 const model = createCommandPaletteModel([{ commands }])21 assert.deepEqual(model.filter(' SVG download '), [commands[3]])22 assert.deepEqual(model.filter('LOAD ⌘o'), [commands[0]])23 assert.deepEqual(model.filter('file'), [commands[0], commands[2]])24})2526test('selectFirst chooses the first enabled result and navigation skips disabled commands cyclically', () => {27 const model = createCommandPaletteModel([{ commands }])28 assert.equal(model.selectFirst(), commands[0])29 assert.equal(model.next(), commands[2])30 assert.equal(model.next(), commands[3])31 assert.equal(model.next(), commands[0])32 assert.equal(model.previous(), commands[3])33 assert.equal(model.previous(), commands[2])34})3536test('navigation with no current selection starts at the relevant end and handles no results', () => {37 const model = createCommandPaletteModel([{ commands }])38 assert.equal(model.previous(), commands[3])39 assert.equal(model.filter('missing').length, 0)40 assert.equal(model.next(), null)41 assert.equal(model.selected, null)42})4344test('lookup and selecting by id preserve command identity, while disabled commands cannot be selected', () => {45 const model = createCommandPaletteModel([{ commands }])46 assert.equal(model.getById('save'), commands[2])47 assert.equal(model.selectById('save'), commands[2])48 assert.equal(model.selectedId, 'save')49 assert.equal(model.selectById('disabled'), null)50 assert.equal(model.getById('unknown'), null)51})