forked from github/copilot-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-github-plan-builder.js
More file actions
78 lines (67 loc) · 3.02 KB
/
Copy pathtest-github-plan-builder.js
File metadata and controls
78 lines (67 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env node
const assert = require('assert');
const path = require('path');
const {
buildGitHubExecutionPlan,
GITHUB_EXECUTION_PLAN_SCHEMA_VERSION,
GITHUB_PLAN_BUILD_SCHEMA_VERSION,
} = require(path.join(__dirname, '..', 'src', 'main', 'github', 'plan-builder.js'));
let pass = 0;
async function test(name, fn) {
await fn();
pass += 1;
console.log(`PASS ${name}`);
}
(async () => {
await test('buildGitHubExecutionPlan creates a deterministic one-step plan for registered GitHub capabilities', async () => {
const report = buildGitHubExecutionPlan({
source: 'cli',
positionals: ['plan', 'build', 'pr', 'diff', '7'],
runtimeOptions: { limit: 30, api: 'false' },
executionPreferences: { approvalMode: 'auto' },
featureFlagEnabled: true,
});
assert.strictEqual(report.schemaVersion, GITHUB_PLAN_BUILD_SCHEMA_VERSION);
assert.strictEqual(report.success, true);
assert.strictEqual(report.planner.mode, 'registry-deterministic');
assert.strictEqual(report.targetCapability.key, 'pr.diff');
assert.strictEqual(report.plan.schemaVersion, GITHUB_EXECUTION_PLAN_SCHEMA_VERSION);
assert.strictEqual(report.plan.steps.length, 1);
assert.strictEqual(report.plan.steps[0].capabilityKey, 'pr.diff');
assert.strictEqual(report.plan.steps[0].policy.allowed, true);
assert.strictEqual(report.plan.steps[0].runtimeInput.number, '7');
assert.strictEqual(report.plan.steps[0].runtimeInput.api, false);
assert.strictEqual(report.plan.steps[0].runtimeInput.limit, 30);
});
await test('buildGitHubExecutionPlan returns usage guidance for incomplete planner requests', async () => {
const report = buildGitHubExecutionPlan({
source: 'slash',
positionals: ['plan', 'build'],
});
assert.strictEqual(report.schemaVersion, GITHUB_PLAN_BUILD_SCHEMA_VERSION);
assert.strictEqual(report.success, false);
assert.strictEqual(report.error, 'USAGE');
assert.ok(report.message.includes('Usage: liku github plan build'));
assert.ok(Array.isArray(report.availableTargets));
assert.ok(report.availableTargets.includes('pr.diff'));
assert.ok(!report.availableTargets.includes('plan.execute'));
assert.ok(!report.availableTargets.includes('plan.runs'));
assert.ok(!report.availableTargets.includes('plan.inspect'));
});
await test('buildGitHubExecutionPlan rejects unknown planner targets', async () => {
const report = buildGitHubExecutionPlan({
source: 'cli',
positionals: ['plan', 'build', 'unknown', 'noop'],
});
assert.strictEqual(report.schemaVersion, GITHUB_PLAN_BUILD_SCHEMA_VERSION);
assert.strictEqual(report.success, false);
assert.strictEqual(report.error, 'UNKNOWN_TARGET');
assert.strictEqual(report.requestedTarget.area, 'unknown');
assert.strictEqual(report.requestedTarget.action, 'noop');
});
console.log(`PASS github plan builder (${pass} assertions)`);
})().catch((error) => {
console.error('FAIL github plan builder');
console.error(error.stack || error.message);
process.exit(1);
});