feat(macp): mosaic macp CLI surface (#410)
This commit was merged in pull request #410.
This commit is contained in:
77
packages/macp/src/cli.spec.ts
Normal file
77
packages/macp/src/cli.spec.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { Command } from 'commander';
|
||||
import { registerMacpCommand } from './cli.js';
|
||||
|
||||
describe('registerMacpCommand', () => {
|
||||
function buildProgram(): Command {
|
||||
const program = new Command();
|
||||
program.exitOverride(); // prevent process.exit in tests
|
||||
registerMacpCommand(program);
|
||||
return program;
|
||||
}
|
||||
|
||||
it('registers a "macp" command on the parent', () => {
|
||||
const program = buildProgram();
|
||||
const macpCmd = program.commands.find((c) => c.name() === 'macp');
|
||||
expect(macpCmd).toBeDefined();
|
||||
});
|
||||
|
||||
it('registers "macp tasks" subcommand group', () => {
|
||||
const program = buildProgram();
|
||||
const macpCmd = program.commands.find((c) => c.name() === 'macp')!;
|
||||
const tasksCmd = macpCmd.commands.find((c) => c.name() === 'tasks');
|
||||
expect(tasksCmd).toBeDefined();
|
||||
});
|
||||
|
||||
it('registers "macp tasks list" subcommand with --status and --type flags', () => {
|
||||
const program = buildProgram();
|
||||
const macpCmd = program.commands.find((c) => c.name() === 'macp')!;
|
||||
const tasksCmd = macpCmd.commands.find((c) => c.name() === 'tasks')!;
|
||||
const listCmd = tasksCmd.commands.find((c) => c.name() === 'list');
|
||||
expect(listCmd).toBeDefined();
|
||||
const optionNames = listCmd!.options.map((o) => o.long);
|
||||
expect(optionNames).toContain('--status');
|
||||
expect(optionNames).toContain('--type');
|
||||
});
|
||||
|
||||
it('registers "macp submit" subcommand', () => {
|
||||
const program = buildProgram();
|
||||
const macpCmd = program.commands.find((c) => c.name() === 'macp')!;
|
||||
const submitCmd = macpCmd.commands.find((c) => c.name() === 'submit');
|
||||
expect(submitCmd).toBeDefined();
|
||||
});
|
||||
|
||||
it('registers "macp gate" subcommand with --fail-on flag', () => {
|
||||
const program = buildProgram();
|
||||
const macpCmd = program.commands.find((c) => c.name() === 'macp')!;
|
||||
const gateCmd = macpCmd.commands.find((c) => c.name() === 'gate');
|
||||
expect(gateCmd).toBeDefined();
|
||||
const optionNames = gateCmd!.options.map((o) => o.long);
|
||||
expect(optionNames).toContain('--fail-on');
|
||||
});
|
||||
|
||||
it('registers "macp events" subcommand group', () => {
|
||||
const program = buildProgram();
|
||||
const macpCmd = program.commands.find((c) => c.name() === 'macp')!;
|
||||
const eventsCmd = macpCmd.commands.find((c) => c.name() === 'events');
|
||||
expect(eventsCmd).toBeDefined();
|
||||
});
|
||||
|
||||
it('registers "macp events tail" subcommand', () => {
|
||||
const program = buildProgram();
|
||||
const macpCmd = program.commands.find((c) => c.name() === 'macp')!;
|
||||
const eventsCmd = macpCmd.commands.find((c) => c.name() === 'events')!;
|
||||
const tailCmd = eventsCmd.commands.find((c) => c.name() === 'tail');
|
||||
expect(tailCmd).toBeDefined();
|
||||
});
|
||||
|
||||
it('has all required top-level subcommands', () => {
|
||||
const program = buildProgram();
|
||||
const macpCmd = program.commands.find((c) => c.name() === 'macp')!;
|
||||
const topLevel = macpCmd.commands.map((c) => c.name());
|
||||
expect(topLevel).toContain('tasks');
|
||||
expect(topLevel).toContain('submit');
|
||||
expect(topLevel).toContain('gate');
|
||||
expect(topLevel).toContain('events');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user