mirror of
https://github.com/affaan-m/ECC.git
synced 2026-08-17 21:15:40 +02:00
* feat(install): add guided Claude plugin setup * fix: support Claude command shims on Windows * feat: support safe Claude plugin scope migration * fix(install): preserve interactive setup terminal * fix(install): auto-migrate setup scope changes * feat(install): add guided multi-harness installer * fix(install): sync Yarn binary metadata * fix(install): handle wizard EOF on Node 18 * ci: allow installer matrix tests to finish * test(install): allow slower PowerShell delegation * fix(install): harden guided provider reconciliation * test(install): harden packaged and local compatibility * chore: prepare guided installer release 2.2.0 * fix(install): report refreshed Codex marketplace state * fix(install): verify managed content provenance * test(install): allow empty Yarn smoke fixture * test(install): invoke Windows package shims safely * fix(install): close cross-platform release gaps * fix(install): require trusted GitHub origins * fix(install): preserve hook profile precedence * refactor(install): centralize trusted GitHub origins * ci: retrigger workflow run after merge of main Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
64 lines
1.4 KiB
JavaScript
64 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert');
|
|
|
|
const {
|
|
validateInteractiveJsonOptions,
|
|
} = require('../../scripts/setup');
|
|
|
|
let passed = 0;
|
|
let failed = 0;
|
|
|
|
function test(name, fn) {
|
|
try {
|
|
fn();
|
|
console.log(` ✓ ${name}`);
|
|
passed += 1;
|
|
} catch (error) {
|
|
console.log(` ✗ ${name}`);
|
|
console.log(` Error: ${error.message}`);
|
|
failed += 1;
|
|
}
|
|
}
|
|
|
|
console.log('\n=== ECC setup option contract tests ===\n');
|
|
|
|
test('rejects interactive JSON when wizard choices are missing', () => {
|
|
assert.throws(
|
|
() => validateInteractiveJsonOptions({
|
|
hooks: undefined,
|
|
json: true,
|
|
mode: 'claude-plugin',
|
|
scope: undefined,
|
|
}, true),
|
|
/json.*scope.*hooks/i
|
|
);
|
|
});
|
|
|
|
test('allows fully specified JSON and ordinary interactive wizard use', () => {
|
|
assert.doesNotThrow(() => validateInteractiveJsonOptions({
|
|
dryRun: true,
|
|
hooks: 'strict',
|
|
json: true,
|
|
mode: 'claude-plugin',
|
|
scope: 'project',
|
|
}, true));
|
|
assert.doesNotThrow(() => validateInteractiveJsonOptions({
|
|
hooks: undefined,
|
|
json: false,
|
|
mode: undefined,
|
|
scope: undefined,
|
|
}, true));
|
|
assert.throws(() => validateInteractiveJsonOptions({
|
|
dryRun: false,
|
|
hooks: 'strict',
|
|
json: true,
|
|
mode: 'claude-plugin',
|
|
scope: 'project',
|
|
yes: false,
|
|
}, true), /json.*yes/i);
|
|
});
|
|
|
|
console.log(`\nResults: Passed: ${passed}, Failed: ${failed}`);
|
|
process.exit(failed > 0 ? 1 : 0);
|