hivecast-sdk/packages/cli/tests/unit/init-command.spec.ts

46 lines
1.7 KiB
TypeScript
Raw Permalink Normal View History

import { describe, it } from 'node:test';
import { strict as assert } from 'node:assert';
import * as fs from 'node:fs';
import * as os from 'node:os';
import * as path from 'node:path';
import { initCommand } from '../../src/commands/init.js';
describe('mx init command', () => {
it('creates matrix.json and scaffold directories', async () => {
const cwd = fs.mkdtempSync(path.join(os.tmpdir(), 'mx-init-'));
try {
const result = await initCommand({
cwd,
name: 'demo-package',
version: '1.2.3',
description: 'demo',
yes: true,
});
assert.equal(result.rootDir, cwd);
assert.equal(fs.existsSync(path.join(cwd, 'matrix.json')), true);
assert.equal(fs.existsSync(path.join(cwd, 'src')), true);
assert.equal(fs.existsSync(path.join(cwd, 'examples')), true);
assert.equal(fs.existsSync(path.join(cwd, 'skills')), true);
assert.equal(fs.existsSync(path.join(cwd, 'tests')), true);
const manifest = JSON.parse(fs.readFileSync(path.join(cwd, 'matrix.json'), 'utf8')) as {
name: string;
version: string;
description: string;
runtime: { language: string; entry: string };
components: unknown[];
permissions: { fsPolicy: string };
};
assert.equal(manifest.name, 'demo-package');
assert.equal(manifest.version, '1.2.3');
assert.equal(manifest.description, 'demo');
assert.equal(manifest.runtime.entry, 'dist/index.js');
assert.equal(Array.isArray(manifest.components), true);
assert.equal(manifest.permissions.fsPolicy, 'none');
} finally {
fs.rmSync(cwd, { recursive: true, force: true });
}
});
});