Files
workbuddy_skills/draw-ui/scripts/credential-ui/tests/configure.test.ts
T

37 lines
2.5 KiB
TypeScript
Raw Normal View History

import assert from 'node:assert/strict';
import { test } from 'node:test';
import { mkdtemp, readFile, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import path from 'node:path';
import { execFile } from 'node:child_process';
import { fileURLToPath } from 'node:url';
const script = fileURLToPath(new URL('../src/cli.ts', import.meta.url));
const run = (args: string[]) => new Promise<{ code: number; output: string }>(resolve => {
execFile(process.execPath, [script, 'configure', ...args], { encoding: 'utf8' },
(error, stdout, stderr) => resolve({ code: error ? 1 : 0, output: stdout + stderr }));
});
test('真实 CLI:创建、局部修改、幂等与只读预览', async t => {
const dir = await mkdtemp(path.join(tmpdir(), 'credential-configure-')); t.after(() => rm(dir, { recursive: true, force: true }));
const file = path.join(dir, 'service.credential.json');
const create = ['--manifest', file, '--id', 'sample-skill', '--label', '服务凭据', '--credential', 'sample/service/default'];
assert.equal((await run(create)).code, 0);
const first = await readFile(file, 'utf8');
assert.equal((await run(create)).code, 0); assert.equal(await readFile(file, 'utf8'), first);
assert.equal((await run(['--manifest', file, '--title', '连接服务', '--placeholder', '输入访问凭据'])).code, 0);
const updated = JSON.parse(await readFile(file, 'utf8'));
assert.equal(updated.credential, 'sample/service/default'); assert.equal(updated.ui.title, '连接服务');
const before = await readFile(file, 'utf8');
assert.equal((await run(['--manifest', file, '--label', '预览', '--dry-run'])).code, 0);
assert.equal(await readFile(file, 'utf8'), before);
});
test('真实 CLI:拒绝更换已有身份、未知字段和不完整声明', async t => {
const dir = await mkdtemp(path.join(tmpdir(), 'credential-configure-')); t.after(() => rm(dir, { recursive: true, force: true }));
const file = path.join(dir, 'service.credential.json');
await run(['--manifest', file, '--id', 'sample-skill', '--label', '服务凭据', '--credential', 'sample/service/default']);
const before = await readFile(file, 'utf8');
assert.equal((await run(['--manifest', file, '--credential', 'other/account'])).code, 1);
assert.equal((await run(['--manifest', file, '--api-key', 'FAKE_VALUE_FOR_TEST_ONLY'])).code, 1);
assert.equal(await readFile(file, 'utf8'), before);
assert.equal((await run(['--manifest', path.join(dir, 'incomplete.json'), '--label', '缺字段'])).code, 1);
});