UNPKG

@mintlify/cli

Version:

The Mintlify CLI

87 lines (66 loc) 2.38 kB
import { dev } from '@mintlify/previewing'; import inquirer from 'inquirer'; import { cli } from '../src/cli.js'; vi.mock('@mintlify/previewing', () => ({ dev: vi.fn() })); vi.mock('readline/promises', () => { return { createInterface: () => { return { close: () => undefined, question: (question: string) => { console.log(question); return 'y'; }, }; }, }; }); const allowedPorts = [3000, 5002]; vi.mock('detect-port', () => ({ default: (port: number) => (allowedPorts.includes(port) ? port : port + 1), })); describe('cli', () => { let originalArgv: string[]; beforeEach(() => { // Remove all cached modules, otherwise the same results are shown in subsequent tests. vi.resetModules(); // mock inquirer prompt vi.spyOn(inquirer, 'prompt').mockResolvedValue({ action: 'continue' }); // Keep track of original process arguments. originalArgv = process.argv; }); afterEach(() => { vi.resetAllMocks(); // Set process arguments back to the original value. process.argv = originalArgv; }); it('should run dev command', async () => { await runCommand('dev'); expect(dev).toHaveBeenCalledWith(expect.objectContaining({ port: 3000 })); }); it('port 5000 and 5001 should be taken and 5002 should be accepted by the user and available.', async () => { const consoleSpy = vi.spyOn(console, 'log'); await runCommand('dev', '--port=5000'); expect(consoleSpy).toHaveBeenCalledTimes(2); expect(consoleSpy).toHaveBeenCalledWith(`Port 5000 is already in use. Trying 5001 instead.`); expect(consoleSpy).toHaveBeenCalledWith(`Port 5001 is already in use. Trying 5002 instead.`); expect(dev).toHaveBeenCalledWith(expect.objectContaining({ port: 5002 })); }); it('fails after the 10th used port', async () => { const consoleSpy = vi.spyOn(console, 'log'); await runCommand('dev', '--port=8000'); expect(consoleSpy).toHaveBeenCalledTimes(9); expect(consoleSpy).toHaveBeenLastCalledWith( `Port 8008 is already in use. Trying 8009 instead.` ); }); }); /** * Programmatically set arguments and execute the CLI script * * @param {...string} args - Additional command arguments. */ async function runCommand(...args: string[]) { process.argv = ['node', 'cli.js', ...args]; return cli(); }