From c1140d6a1337a4ab511627145c5ddd50ec755a8e Mon Sep 17 00:00:00 2001 From: Mentor Date: Tue, 30 Jun 2026 20:14:16 +0000 Subject: [PATCH] test(cli): cover documented command surface --- packages/cli/src/commands/cli-surface.test.ts | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 packages/cli/src/commands/cli-surface.test.ts diff --git a/packages/cli/src/commands/cli-surface.test.ts b/packages/cli/src/commands/cli-surface.test.ts new file mode 100644 index 00000000..b58e4e3e --- /dev/null +++ b/packages/cli/src/commands/cli-surface.test.ts @@ -0,0 +1,52 @@ +import { readFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { describe, expect, it } from 'vitest'; + +const commandsDir = dirname(fileURLToPath(import.meta.url)); + +function commandSource(fileName: string): string { + return readFileSync(join(commandsDir, fileName), 'utf8'); +} + +describe('documented sh1pt CLI surface', () => { + it('keeps the four primary tagline verbs registered', () => { + expect(commandSource('build.ts')).toContain("new Command('build')"); + expect(commandSource('promote.ts')).toContain("new Command('promote')"); + expect(commandSource('scale.ts')).toContain("new Command('scale')"); + expect(commandSource('iterate.ts')).toContain("new Command('iterate')"); + }); + + it('keeps key documented subcommands under the primary verbs', () => { + const build = commandSource('build.ts'); + const promote = commandSource('promote.ts'); + const scale = commandSource('scale.ts'); + const iterate = commandSource('iterate.ts'); + + expect(build).toContain('buildCmd.addCommand(entityCmd)'); + expect(build).toContain('buildCmd.addCommand(createActionsCmd())'); + expect(build).toContain("'patch'"); + + for (const subcommand of ['setup', 'status', 'stop', 'creatives']) { + expect(promote).toContain(`.command('${subcommand}')`); + } + expect(promote).toContain('promoteCmd.addCommand(shipSub)'); + expect(promote).toContain('promoteCmd.addCommand(merchCmd)'); + + for (const subcommand of ['up', 'down', 'auto', 'dns', 'rollout', 'cost', 'status']) { + expect(scale).toContain(`.command('${subcommand}')`); + } + + for (const subcommand of ['run', 'watch', 'goals', 'test ', 'experiments']) { + expect(iterate).toContain(`.command('${subcommand}')`); + } + }); + + it('keeps promoted shipping workflow subcommands mirrored by ship', () => { + const ship = commandSource('ship.ts'); + + for (const subcommand of ['init', 'status', 'target', 'setup', 'rollback', 'lint', 'logs']) { + expect(ship).toContain(`.command('${subcommand}')`); + } + }); +});