mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 01:56:46 +00:00
118 lines
2.8 KiB
TypeScript
118 lines
2.8 KiB
TypeScript
import { mock } from 'jest-mock-extended';
|
|
import z from 'zod';
|
|
|
|
import { CliParser } from '../cli-parser';
|
|
|
|
describe('parse', () => {
|
|
it('should parse `argv` without flags schema', () => {
|
|
const cliParser = new CliParser(mock());
|
|
const result = cliParser.parse({ argv: ['node', 'script.js', 'arg1', 'arg2'] });
|
|
expect(result).toEqual({ flags: {}, args: ['arg1', 'arg2'] });
|
|
});
|
|
|
|
it('should parse `argv` with flags schema', () => {
|
|
const cliParser = new CliParser(mock());
|
|
const flagsSchema = z.object({
|
|
verbose: z.boolean().optional(),
|
|
name: z.string().optional(),
|
|
});
|
|
|
|
const result = cliParser.parse({
|
|
argv: ['node', 'script.js', '--verbose', '--name', 'test', 'arg1'],
|
|
flagsSchema,
|
|
});
|
|
|
|
expect(result).toEqual({
|
|
flags: { verbose: true, name: 'test' },
|
|
args: ['arg1'],
|
|
});
|
|
});
|
|
|
|
it('should ignore flags not defined in schema', () => {
|
|
const cliParser = new CliParser(mock());
|
|
const flagsSchema = z.object({
|
|
name: z.string().optional(),
|
|
// ignored is absent
|
|
});
|
|
|
|
const result = cliParser.parse({
|
|
argv: ['node', 'script.js', '--name', 'test', '--ignored', 'value', 'arg1'],
|
|
flagsSchema,
|
|
});
|
|
|
|
expect(result).toEqual({
|
|
flags: {
|
|
name: 'test',
|
|
// ignored is absent
|
|
},
|
|
args: ['arg1'],
|
|
});
|
|
});
|
|
|
|
it('should handle a numeric value for `--id` flag', () => {
|
|
const cliParser = new CliParser(mock());
|
|
const result = cliParser.parse({
|
|
argv: ['node', 'script.js', '--id', '123', 'arg1'],
|
|
flagsSchema: z.object({
|
|
id: z.string(),
|
|
}),
|
|
});
|
|
|
|
expect(result).toEqual({
|
|
flags: { id: '123' },
|
|
args: ['arg1'],
|
|
});
|
|
});
|
|
|
|
it('should handle positional arguments', () => {
|
|
const cliParser = new CliParser(mock());
|
|
const result = cliParser.parse({
|
|
argv: ['node', 'script.js', '123', 'true'],
|
|
});
|
|
|
|
expect(result.args).toEqual(['123', 'true']);
|
|
expect(typeof result.args[0]).toBe('string');
|
|
expect(typeof result.args[1]).toBe('string');
|
|
});
|
|
|
|
it('should handle required flags with aliases', () => {
|
|
const cliParser = new CliParser(mock());
|
|
const flagsSchema = z.object({
|
|
name: z.string(),
|
|
});
|
|
|
|
// @ts-expect-error zod was monkey-patched to support aliases
|
|
flagsSchema.shape.name._def._alias = 'n';
|
|
|
|
const result = cliParser.parse({
|
|
argv: ['node', 'script.js', '-n', 'test', 'arg1'],
|
|
flagsSchema,
|
|
});
|
|
|
|
expect(result).toEqual({
|
|
flags: { name: 'test' },
|
|
args: ['arg1'],
|
|
});
|
|
});
|
|
|
|
it('should handle optional flags with aliases', () => {
|
|
const cliParser = new CliParser(mock());
|
|
const flagsSchema = z.object({
|
|
name: z.optional(z.string()),
|
|
});
|
|
|
|
// @ts-expect-error zod was monkey-patched to support aliases
|
|
flagsSchema.shape.name._def.innerType._def._alias = 'n';
|
|
|
|
const result = cliParser.parse({
|
|
argv: ['node', 'script.js', '-n', 'test', 'arg1'],
|
|
flagsSchema,
|
|
});
|
|
|
|
expect(result).toEqual({
|
|
flags: { name: 'test' },
|
|
args: ['arg1'],
|
|
});
|
|
});
|
|
});
|