import { spawnSync } from 'node:child_process'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { describe, expect, it } from 'vitest'; const testDir = path.dirname(fileURLToPath(import.meta.url)); const repoRoot = path.resolve(testDir, '../..'); const cliEntry = path.join(repoRoot, 'src/cli/index.ts'); function runHelp(command: string) { return spawnSync(process.execPath, ['--import', 'tsx', cliEntry, command, '--help'], { cwd: repoRoot, encoding: 'utf8', }); } describe('CLI help surface', () => { it('query help keeps advanced search options without importing analyze deps', () => { const result = runHelp('query'); expect(result.status).toBe(0); expect(result.stdout).toContain('--context '); expect(result.stdout).toContain('--goal '); expect(result.stdout).toContain('--content'); expect(result.stderr).not.toContain('tree-sitter-kotlin'); }); it('context help keeps optional name and disambiguation flags', () => { const result = runHelp('context'); expect(result.status).toBe(0); expect(result.stdout).toContain('context [options] [name]'); expect(result.stdout).toContain('--uid '); expect(result.stdout).toContain('--file '); }); it('impact help keeps repo and include-tests flags', () => { const result = runHelp('impact'); expect(result.status).toBe(0); expect(result.stdout).toContain('--depth '); expect(result.stdout).toContain('--include-tests'); expect(result.stdout).toContain('--repo '); }); });