Files
Elydora-Node-SDK/test/copilot-official.test.mjs
T

82 lines
2.9 KiB
JavaScript

import assert from 'node:assert/strict';
import path from 'node:path';
import test from 'node:test';
import {
createFixture,
environment,
runNode,
} from '../test-support/copilot-test-helpers.mjs';
const copilotEntry = process.env.ELYDORA_COPILOT_ENTRY;
const copilotRuntimeEntry = process.env.ELYDORA_COPILOT_RUNTIME_ENTRY;
test('official GitHub Copilot CLI 1.0.71 loads all three managed hooks', {
skip: copilotEntry && copilotRuntimeEntry
? false
: 'set ELYDORA_COPILOT_ENTRY and ELYDORA_COPILOT_RUNTIME_ENTRY to official package files',
}, async () => {
const fixture = await createFixture();
try {
assert.equal((await fixture.install()).code, 0);
const version = await runNode(
[copilotEntry, '--version'],
environment(fixture),
fixture.projectDir,
);
assert.equal(version.code, 0, version.stderr);
assert.match(version.stdout, /^GitHub Copilot CLI 1\.0\.71\.$/m);
const source = `
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const runtime = require(process.env.ELYDORA_COPILOT_RUNTIME_ENTRY);
const session = await runtime.hookSessionCreate({
cwd: process.env.ELYDORA_PROJECT,
repoRoot: process.env.ELYDORA_PROJECT,
sessionId: 'elydora-official-test',
settingsJson: '{}',
userHooksDir: process.env.ELYDORA_HOOKS,
allowLocalhost: false,
allowHttpAuthHooks: false,
discoverPolicies: false,
});
try {
const snapshot = JSON.parse(await runtime.hookSessionSnapshot(session.handle));
console.log(JSON.stringify({ load: session.load, snapshot }));
} finally {
runtime.hookSessionDispose(session.handle);
}
`;
const load = await runNode(
['--input-type=module', '--eval', source],
{
...environment(fixture),
ELYDORA_COPILOT_RUNTIME_ENTRY: copilotRuntimeEntry,
ELYDORA_HOOKS: fixture.hooksDir,
ELYDORA_PROJECT: fixture.projectDir,
},
fixture.projectDir,
);
assert.equal(load.code, 0, load.stderr);
const result = JSON.parse(load.stdout);
assert.equal(result.load.hookCount, 3);
assert.deepEqual(result.load.errors, []);
assert.deepEqual(result.load.warnings, []);
assert.deepEqual(
result.snapshot.hooks.map((hook) => hook.eventName).sort(),
['postToolUse', 'postToolUseFailure', 'preToolUse'],
);
for (const hook of result.snapshot.hooks) {
assert.match(hook.source, /hooks[\\/]elydora-audit\.json$/);
const spec = JSON.parse(hook.specJson);
assert.equal(spec.config.type, 'command');
assert.equal(spec.config.timeoutSec, 10);
assert.match(spec.config.bash, /node(?:\.exe)?/i);
assert.match(spec.config.powershell, /^& /);
assert.equal(path.basename(spec.source), 'elydora-audit.json');
}
} finally {
await fixture.close();
}
});