UNPKG

amaran-light-cli

Version:

Command line tool for controlling Aputure Amaran lights via WebSocket to a local Amaran desktop app.

65 lines 2.82 kB
import { spawnSync } from 'node:child_process'; import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; import { join } from 'node:path'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; import { CONFIG_DIR_ENV } from '../config.js'; function runCli(args, configDir) { return spawnSync('npx', ['tsx', 'src/cli.ts', ...args], { encoding: 'utf8', env: { ...process.env, [CONFIG_DIR_ENV]: configDir, FORCE_COLOR: '0', NODE_ENV: 'test', }, }); } describe('CLI config integration', () => { let configDir; let configPath; beforeEach(() => { mkdirSync('.test-storage', { recursive: true }); configDir = mkdtempSync(join(process.cwd(), '.test-storage', 'cli-config-')); configPath = join(configDir, 'config.json'); }); afterEach(() => { rmSync(configDir, { recursive: true, force: true }); }); it('shows help output', () => { const proc = runCli(['--help'], configDir); expect(proc.status).toBe(0); expect(proc.stdout).toContain('Amaran Light Control CLI - v'); expect(proc.stdout).toContain('(dev)'); expect(proc.stdout).toContain('Usage: amaran-cli'); }); it('shows version output', () => { const proc = runCli(['--version'], configDir); expect(proc.status).toBe(0); expect(proc.stdout.trim()).toMatch(/^\d+\.\d+\.\d+$/); }); it('saves configuration to an isolated platform config file', () => { const proc = runCli(['config', '--lat', '37.7749', '--lon', '-122.4194', '--debug', 'true'], configDir); expect(proc.status).toBe(0); expect(proc.stdout).toContain('Configuration saved successfully'); expect(existsSync(configPath)).toBe(true); const config = JSON.parse(readFileSync(configPath, 'utf8')); expect(config.latitude).toBe(37.7749); expect(config.longitude).toBe(-122.4194); expect(config.debug).toBe(true); }); it('fails fast on invalid persisted configuration', () => { mkdirSync(configDir, { recursive: true }); writeFileSync(configPath, JSON.stringify({ latitude: 200 })); const proc = runCli(['config', '--show'], configDir); expect(proc.status).toBe(1); expect(proc.stderr).toContain('Failed to load config'); }); it('exits non-zero when config save fails', () => { rmSync(configDir, { recursive: true, force: true }); writeFileSync(configDir, 'not a directory'); const proc = runCli(['config', '--debug', 'true'], configDir); expect(proc.status).toBe(1); expect(proc.stderr).toContain('Error saving configuration'); }); }); //# sourceMappingURL=cli.config.test.js.map