open-design/apps/daemon/tests/cli-startup.test.ts
2026-05-18 17:08:17 +08:00

60 lines
1.8 KiB
TypeScript

import { chmod, mkdir, mkdtemp, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { execFile } from 'node:child_process';
import { promisify } from 'node:util';
import { describe, expect, it } from 'vitest';
const execFileAsync = promisify(execFile);
const daemonRoot = fileURLToPath(new URL('..', import.meta.url));
const cliEntry = fileURLToPath(new URL('../src/cli.ts', import.meta.url));
describe('CLI startup boundaries', () => {
it('does not import daemon startup code for media client commands', async () => {
const root = await mkdtemp(join(tmpdir(), 'od-cli-media-'));
const dataDir = join(root, 'data');
await mkdir(dataDir);
await chmod(dataDir, 0o500);
try {
await execFileAsync(
process.execPath,
[
'--import',
'tsx',
cliEntry,
'media',
'generate',
'--project',
'repro',
'--surface',
'image',
'--model',
'gpt-image-2',
'--prompt',
'test',
'--daemon-url',
'http://127.0.0.1:59999',
],
{
cwd: daemonRoot,
env: {
...process.env,
OD_DATA_DIR: dataDir,
},
},
);
throw new Error('media command unexpectedly succeeded');
} catch (error: unknown) {
const failed = error as { code?: number; stderr?: string };
const stderr = failed.stderr ?? '';
expect(failed.code).toBe(3);
expect(stderr).toContain('failed to reach daemon');
expect(stderr).not.toContain('OD_DATA_DIR');
} finally {
await chmod(dataDir, 0o700).catch(() => undefined);
await rm(root, { recursive: true, force: true });
}
});
});