/
AleksVolobuev
/
cli-nord
Обзор
Документация
Войти
/
AleksVolobuev
/
cli-nord
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/test-cli-integration.mjs
47 строк
2 KB
AleksVolobuev
feat: strengthen CLI operational checks
05 авг 2026, 11:08
05 авг 2026, 11:08
4434983
Код
Авторство
О чём код?
import { existsSync, mkdtempSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import path from 'node:path'; import { spawnSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; const root = path.dirname(path.dirname(fileURLToPath(import.meta.url))); const tempDir = mkdtempSync(path.join(tmpdir(), 'nord-cli-integration-')); const nordHome = path.join(tempDir, 'home'); const backup = path.join(tempDir, 'backup.json'); function run(args) { const result = spawnSync(process.execPath, [path.join(root, 'dist', 'cli.js'), ...args], { cwd: root, encoding: 'utf8', env: { ...process.env, NORD_HOME: nordHome, NO_COLOR: '1' }, }); if (result.status !== 0) { throw new Error(`nord ${args.join(' ')} failed:\n${result.stdout}\n${result.stderr}`); } return result.stdout; } function runFailure(args) { const result = spawnSync(process.execPath, [path.join(root, 'dist', 'cli.js'), ...args], { cwd: root, encoding: 'utf8', env: { ...process.env, NORD_HOME: nordHome, NO_COLOR: '1' }, }); if (result.status === 0) throw new Error(`nord ${args.join(' ')} unexpectedly succeeded`); return `${result.stdout}\n${result.stderr}`; } try { if (!run(['doctor']).includes('Диагностика завершена')) throw new Error('doctor не завершился успешно'); run(['data', 'export', backup]); if (!existsSync(backup)) throw new Error('data export не создал backup'); if (!run(['data', 'import', backup, '--dry-run']).includes('Данные не изменены')) { throw new Error('data import --dry-run не подтвердил откат'); } if (!runFailure(['stats', '--theme', 'not-a-theme']).includes('Неизвестная тема')) { throw new Error('CLI не вернул валидационную ошибку theme'); } console.log('CLI integration: doctor, export/import и validation passed'); } finally { rmSync(tempDir, { recursive: true, force: true }); }