UNPKG

@nestbox-ai/cli

Version:

The cli tools that helps developers to build agents

218 lines (165 loc) 9.36 kB
import { describe, it, expect, vi, beforeEach } from 'vitest'; import { Command } from 'commander'; import { registerDocumentCommands } from '../src/commands/document'; describe('Document Commands', () => { let program: Command; beforeEach(() => { program = new Command(); vi.clearAllMocks(); }); describe('registerDocumentCommands', () => { it('should register document command group', () => { registerDocumentCommands(program); const commands = program.commands; const documentCommand = commands.find(cmd => cmd.name() === 'document'); expect(documentCommand).toBeDefined(); expect(documentCommand?.description()).toBe('Manage Nestbox documents'); }); it('should register doc subcommand group', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const subCommands = documentCommand?.commands || []; const docCommand = subCommands.find(cmd => cmd.name() === 'doc'); expect(docCommand).toBeDefined(); expect(docCommand?.description()).toBe('Manage individual documents'); }); it('should register collection subcommand group', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const subCommands = documentCommand?.commands || []; const collectionCommand = subCommands.find(cmd => cmd.name() === 'collection'); expect(collectionCommand).toBeDefined(); expect(collectionCommand?.description()).toBe('Manage document collections'); }); it('should register doc list subcommand', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const collectionCommand = documentCommand?.commands.find(cmd => cmd.name() === 'collection'); const collectionSubCommands = collectionCommand?.commands || []; const listCommand = collectionSubCommands.find(cmd => cmd.name() === 'list'); expect(listCommand).toBeDefined(); expect(listCommand?.description()).toBe('List document collections for a specific instance'); // Check options const options = listCommand?.options || []; const instanceOption = options.find(opt => opt.long === '--instance'); const projectOption = options.find(opt => opt.long === '--project'); expect(instanceOption).toBeDefined(); expect(projectOption).toBeDefined(); }); it('should register doc create subcommand', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const collectionCommand = documentCommand?.commands.find(cmd => cmd.name() === 'collection'); const collectionSubCommands = collectionCommand?.commands || []; const createCommand = collectionSubCommands.find(cmd => cmd.name() === 'create'); expect(createCommand).toBeDefined(); expect(createCommand?.description()).toBe('Create a new document collection for a specific instance'); // Check options const options = createCommand?.options || []; const instanceOption = options.find(opt => opt.long === '--instance'); const projectOption = options.find(opt => opt.long === '--project'); expect(instanceOption).toBeDefined(); expect(projectOption).toBeDefined(); }); it('should register doc get subcommand', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const docCommand = documentCommand?.commands.find(cmd => cmd.name() === 'doc'); const docSubCommands = docCommand?.commands || []; const getCommand = docSubCommands.find(cmd => cmd.name() === 'get'); expect(getCommand).toBeDefined(); expect(getCommand?.description()).toBe('Get a document from a collection'); // Arguments are part of the command definition, not in args array expect(getCommand?.name()).toBe('get'); }); it('should register doc delete subcommand', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const docCommand = documentCommand?.commands.find(cmd => cmd.name() === 'doc'); const docSubCommands = docCommand?.commands || []; const deleteCommand = docSubCommands.find(cmd => cmd.name() === 'delete'); expect(deleteCommand).toBeDefined(); expect(deleteCommand?.description()).toBe('Delete a document from a collection'); // Arguments are part of the command definition, not in args array expect(deleteCommand?.name()).toBe('delete'); }); it('should register doc update subcommand', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const docCommand = documentCommand?.commands.find(cmd => cmd.name() === 'doc'); const docSubCommands = docCommand?.commands || []; const updateCommand = docSubCommands.find(cmd => cmd.name() === 'update'); expect(updateCommand).toBeDefined(); expect(updateCommand?.description()).toBe('Update a document in a collection'); // Arguments are part of the command definition, not in args array expect(updateCommand?.name()).toBe('update'); }); it('should register collection add subcommand', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const docCommand = documentCommand?.commands.find(cmd => cmd.name() === 'doc'); const docSubCommands = docCommand?.commands || []; const addCommand = docSubCommands.find(cmd => cmd.name() === 'add'); expect(addCommand).toBeDefined(); expect(addCommand?.description()).toBe('Add a new document to a collection'); // Check options const options = addCommand?.options || []; const instanceOption = options.find(opt => opt.long === '--instance'); const collectionOption = options.find(opt => opt.long === '--collection'); expect(instanceOption).toBeDefined(); expect(collectionOption).toBeDefined(); }); it('should register collection search subcommand', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const docCommand = documentCommand?.commands.find(cmd => cmd.name() === 'doc'); const docSubCommands = docCommand?.commands || []; const searchCommand = docSubCommands.find(cmd => cmd.name() === 'search'); expect(searchCommand).toBeDefined(); expect(searchCommand?.description()).toBe('Search for documents in a collection'); // Check arguments and options expect(searchCommand?.name()).toBe('search'); }); it('should have all expected doc subcommands', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const docCommand = documentCommand?.commands.find(cmd => cmd.name() === 'doc'); const docSubCommandNames = docCommand?.commands.map(cmd => cmd.name()) || []; expect(docSubCommandNames).toContain('add'); expect(docSubCommandNames).toContain('get'); expect(docSubCommandNames).toContain('delete'); expect(docSubCommandNames).toContain('update'); expect(docSubCommandNames).toContain('upload-file'); expect(docSubCommandNames).toContain('search'); expect(docSubCommandNames).toHaveLength(6); }); it('should have all expected collection subcommands', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const collectionCommand = documentCommand?.commands.find(cmd => cmd.name() === 'collection'); const collectionSubCommandNames = collectionCommand?.commands.map(cmd => cmd.name()) || []; expect(collectionSubCommandNames).toContain('list'); expect(collectionSubCommandNames).toContain('create'); expect(collectionSubCommandNames).toContain('get'); expect(collectionSubCommandNames).toContain('delete'); expect(collectionSubCommandNames).toContain('update'); expect(collectionSubCommandNames).toHaveLength(5); }); it('should have proper action functions for all subcommands', () => { registerDocumentCommands(program); const documentCommand = program.commands.find(cmd => cmd.name() === 'document'); const docCommand = documentCommand?.commands.find(cmd => cmd.name() === 'doc'); const collectionCommand = documentCommand?.commands.find(cmd => cmd.name() === 'collection'); // Check doc subcommands const docSubCommands = docCommand?.commands || []; docSubCommands.forEach(cmd => { expect(typeof cmd.action).toBe('function'); }); // Check collection subcommands const collectionSubCommands = collectionCommand?.commands || []; collectionSubCommands.forEach(cmd => { expect(typeof cmd.action).toBe('function'); }); }); }); });