serialization.test.ts
1 import { describe, expect, it } from 'vitest'; 2 import type { CliCommand } from './registry.js'; 3 import { Strategy } from './registry.js'; 4 import { formatRegistryHelpText, serializeCommand } from './serialization.js'; 5 6 describe('formatRegistryHelpText', () => { 7 it('summarizes long choices lists so help text stays readable', () => { 8 const cmd: CliCommand = { 9 site: 'demo', 10 name: 'dynamic', 11 description: 'Demo command', 12 strategy: Strategy.PUBLIC, 13 browser: false, 14 args: [ 15 { 16 name: 'field', 17 help: 'Field to use', 18 choices: ['all-fields', 'topic', 'title', 'author', 'publication-titles', 'year-published', 'doi'], 19 }, 20 ], 21 columns: ['field'], 22 }; 23 24 expect(formatRegistryHelpText(cmd)).toContain('--field: all-fields, topic, title, author, ... (+3 more)'); 25 }); 26 27 it('includes aliases in structured serialization and help text', () => { 28 const cmd: CliCommand = { 29 site: 'demo', 30 name: 'get', 31 aliases: ['metadata'], 32 description: 'Demo command', 33 strategy: Strategy.COOKIE, 34 browser: true, 35 args: [], 36 }; 37 38 expect(serializeCommand(cmd)).toMatchObject({ 39 command: 'demo/get', 40 aliases: ['metadata'], 41 }); 42 expect(formatRegistryHelpText(cmd)).toContain('Aliases: metadata'); 43 }); 44 });