/ src / serialization.test.ts
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  });