69 lines
2.7 KiB
TypeScript
69 lines
2.7 KiB
TypeScript
import { Command } from 'commander';
|
|
import { describe, it, expect } from 'vitest';
|
|
|
|
import { registerLogCommand } from './cli.js';
|
|
|
|
function buildTestProgram(): Command {
|
|
const program = new Command('mosaic');
|
|
program.exitOverride(); // prevent process.exit in tests
|
|
registerLogCommand(program);
|
|
return program;
|
|
}
|
|
|
|
describe('registerLogCommand', () => {
|
|
it('registers a "log" subcommand on the parent', () => {
|
|
const program = buildTestProgram();
|
|
const names = program.commands.map((c) => c.name());
|
|
expect(names).toContain('log');
|
|
});
|
|
|
|
it('log command has tail, search, export, and level subcommands', () => {
|
|
const program = buildTestProgram();
|
|
const logCmd = program.commands.find((c) => c.name() === 'log');
|
|
expect(logCmd).toBeDefined();
|
|
const subNames = logCmd!.commands.map((c) => c.name());
|
|
expect(subNames).toContain('tail');
|
|
expect(subNames).toContain('search');
|
|
expect(subNames).toContain('export');
|
|
expect(subNames).toContain('level');
|
|
});
|
|
|
|
it('tail subcommand has expected options', () => {
|
|
const program = buildTestProgram();
|
|
const logCmd = program.commands.find((c) => c.name() === 'log')!;
|
|
const tailCmd = logCmd.commands.find((c) => c.name() === 'tail')!;
|
|
const optionNames = tailCmd.options.map((o) => o.long);
|
|
expect(optionNames).toContain('--agent');
|
|
expect(optionNames).toContain('--level');
|
|
expect(optionNames).toContain('--category');
|
|
expect(optionNames).toContain('--tier');
|
|
expect(optionNames).toContain('--limit');
|
|
expect(optionNames).toContain('--db');
|
|
});
|
|
|
|
it('search subcommand accepts a positional query argument', () => {
|
|
const program = buildTestProgram();
|
|
const logCmd = program.commands.find((c) => c.name() === 'log')!;
|
|
const searchCmd = logCmd.commands.find((c) => c.name() === 'search')!;
|
|
// Commander stores positional args in _args
|
|
const argNames = searchCmd.registeredArguments.map((a) => a.name());
|
|
expect(argNames).toContain('query');
|
|
});
|
|
|
|
it('export subcommand accepts a positional path argument', () => {
|
|
const program = buildTestProgram();
|
|
const logCmd = program.commands.find((c) => c.name() === 'log')!;
|
|
const exportCmd = logCmd.commands.find((c) => c.name() === 'export')!;
|
|
const argNames = exportCmd.registeredArguments.map((a) => a.name());
|
|
expect(argNames).toContain('path');
|
|
});
|
|
|
|
it('level subcommand accepts a positional level argument', () => {
|
|
const program = buildTestProgram();
|
|
const logCmd = program.commands.find((c) => c.name() === 'log')!;
|
|
const levelCmd = logCmd.commands.find((c) => c.name() === 'level')!;
|
|
const argNames = levelCmd.registeredArguments.map((a) => a.name());
|
|
expect(argNames).toContain('level');
|
|
});
|
|
});
|