Files
repomix-mirror/tests/website/cliCommand.test.ts
Kazuki Yamada 7ea89f7fd0 fix(website): Remove Vue dependency from cliCommand utility to fix CI
Define CliCommandPackOptions interface locally in cliCommand.ts instead of
importing PackOptions from usePackOptions.ts which depends on Vue module.
This prevents tsc from following the import chain to Vue in CI.
2026-02-03 00:06:09 +09:00

118 lines
3.7 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import { type CliCommandPackOptions, generateCliCommand } from '../../website/client/components/utils/cliCommand.js';
const createOptions = (overrides: Partial<CliCommandPackOptions> = {}): CliCommandPackOptions => ({
format: 'xml',
removeComments: false,
removeEmptyLines: false,
showLineNumbers: false,
fileSummary: true,
directoryStructure: true,
includePatterns: '',
ignorePatterns: '',
outputParsable: false,
compress: false,
...overrides,
});
describe('generateCliCommand', () => {
test('should generate basic command without options', () => {
expect(generateCliCommand(undefined)).toBe('npx repomix');
});
test('should add --remote for valid GitHub shorthand', () => {
const result = generateCliCommand('yamadashy/repomix');
expect(result).toBe("npx repomix --remote 'yamadashy/repomix'");
});
test('should add --remote for valid URL', () => {
const result = generateCliCommand('https://github.com/yamadashy/repomix');
expect(result).toBe("npx repomix --remote 'https://github.com/yamadashy/repomix'");
});
test('should not add --remote for uploaded file names', () => {
const result = generateCliCommand('project.zip');
expect(result).toBe('npx repomix');
});
test('should add format option when not default xml', () => {
const result = generateCliCommand(undefined, createOptions({ format: 'markdown' }));
expect(result).toBe('npx repomix --style markdown');
});
test('should not add format option when xml (default)', () => {
const result = generateCliCommand(undefined, createOptions({ format: 'xml' }));
expect(result).toBe('npx repomix');
});
test('should add boolean flags', () => {
const result = generateCliCommand(
undefined,
createOptions({
removeComments: true,
removeEmptyLines: true,
showLineNumbers: true,
outputParsable: true,
compress: true,
}),
);
expect(result).toBe(
'npx repomix --remove-comments --remove-empty-lines --output-show-line-numbers --parsable-style --compress',
);
});
test('should add no- flags for disabled defaults', () => {
const result = generateCliCommand(
undefined,
createOptions({
fileSummary: false,
directoryStructure: false,
}),
);
expect(result).toBe('npx repomix --no-file-summary --no-directory-structure');
});
test('should shell-escape include and ignore patterns', () => {
const result = generateCliCommand(
undefined,
createOptions({
includePatterns: '**/*.ts',
ignorePatterns: "test's dir",
}),
);
expect(result).toBe("npx repomix --include '**/*.ts' --ignore 'test'\\''s dir'");
});
test('should skip empty patterns', () => {
const result = generateCliCommand(
undefined,
createOptions({
includePatterns: ' ',
ignorePatterns: '',
}),
);
expect(result).toBe('npx repomix');
});
test('should combine all options', () => {
const result = generateCliCommand(
'yamadashy/repomix',
createOptions({
format: 'markdown',
removeComments: true,
compress: true,
fileSummary: false,
includePatterns: 'src/**',
}),
);
expect(result).toBe(
"npx repomix --remote 'yamadashy/repomix' --style markdown --remove-comments --compress --no-file-summary --include 'src/**'",
);
});
test('should escape shell metacharacters in repository URL', () => {
const result = generateCliCommand('https://example.com/repo;rm -rf /', undefined);
expect(result).toBe("npx repomix --remote 'https://example.com/repo;rm -rf /'");
});
});