Skip to main content
Glama
deleonio
by deleonio
cli-interface.spec.ts3.23 kB
import { Command } from 'commander'; import fs from 'fs'; import assert from 'node:assert'; import os from 'os'; import path from 'path'; import generateScss from '../src/generate-scss'; import info from '../src/info'; import migrate from '../src/migrate'; import { TaskRunner } from '../src/migrate/runner/task-runner'; import { getRemoveMode, setRemoveMode } from '../src/migrate/shares/reuse'; describe('CLI interface', function () { this.timeout(5000); it('runs generate-scss command', async () => { const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kolibri-cli-')); const cwd = process.cwd(); process.chdir(tmpDir); const typedBem = require('typed-bem/scss'); const original = typedBem.generateBemScssFile; const calls: string[] = []; typedBem.generateBemScssFile = (_: unknown, name: string) => { calls.push(name); }; const program = new Command(); generateScss(program); await program.parseAsync(['node', 'cli', 'generate-scss']); typedBem.generateBemScssFile = original; process.chdir(cwd); assert.deepStrictEqual(calls, ['alert', 'icon']); }); it('runs info command', async () => { const program = new Command(); info(program); let output = ''; const original = console.log; console.log = (str: string) => { output += str; }; await program.parseAsync(['node', 'cli', 'info']); console.log = original; assert.ok(output.includes('Operating System')); }); it('runs migrate command with options', async () => { const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kolibri-cli-')); fs.writeFileSync( path.join(tmpDir, 'package.json'), JSON.stringify({ dependencies: { '@public-ui/components': '0.0.0' }, devDependencies: { '@public-ui/kolibri-cli': '0.0.0' } }), ); fs.writeFileSync(path.join(tmpDir, 'pnpm-lock.yaml'), ''); const cwd = process.cwd(); try { process.chdir(tmpDir); const childProc = require('child_process'); const execOrig = childProc.exec; (childProc as any).exec = (_: string, cb: (err: null, out: string) => void) => cb(null, ''); let runCalled = false; const runOrig = TaskRunner.prototype.run; TaskRunner.prototype.run = function () { runCalled = true; }; const getStatusOrig = TaskRunner.prototype.getStatus; TaskRunner.prototype.getStatus = () => ({ total: 0, done: 0, pending: 0, nextVersion: '0.0.0', config: { migrate: { tasks: {} } } }); const getPendingOrig = TaskRunner.prototype.getPendingMinVersion; TaskRunner.prototype.getPendingMinVersion = () => '0.0.0'; const program = new Command(); migrate(program); await program.parseAsync([ 'node', 'cli', 'migrate', '.', '--ignore-uncommitted-changes', '--overwrite-current-version', '0.0.0', '--overwrite-target-version', '0.0.0', '--remove-mode', 'delete', '--test-tasks', ]); (childProc as any).exec = execOrig; TaskRunner.prototype.run = runOrig; TaskRunner.prototype.getStatus = getStatusOrig; TaskRunner.prototype.getPendingMinVersion = getPendingOrig; assert.ok(runCalled); assert.equal(getRemoveMode(), 'delete'); setRemoveMode('prefix'); } finally { // Always restore working directory process.chdir(cwd); } }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/deleonio/public-ui-kolibri'

If you have feedback or need assistance with the MCP directory API, please join our Discord server