fix: reject flags passed as package manager names in setup-package-manager CLI

When --global or --project was followed by another flag (e.g., --global --project),
the flag was treated as a package manager name. Added pmName.startsWith('-') check
to both handlers. Added 20 tests across 4 test files covering argument validation,
ensureDir error propagation, runCommand stderr handling, and saveAliases failure paths.
This commit is contained in:
Affaan Mustafa
2026-02-13 03:37:46 -08:00
parent b1eb99d961
commit 167b105cac
5 changed files with 220 additions and 2 deletions

View File

@@ -682,6 +682,39 @@ function runTests() {
assert.strictEqual(resolved.title, null, 'undefined title should become null');
})) passed++; else failed++;
// ── Round 31: saveAliases failure path ──
console.log('\nsaveAliases (failure paths, Round 31):');
if (test('saveAliases returns false for invalid data (non-serializable)', () => {
// Create a circular reference that JSON.stringify cannot handle
const circular = { aliases: {}, metadata: {} };
circular.self = circular;
const result = aliases.saveAliases(circular);
assert.strictEqual(result, false, 'Should return false for non-serializable data');
})) passed++; else failed++;
if (test('saveAliases handles writing to read-only directory gracefully', () => {
// Save current aliases, verify data is still intact after failed save attempt
resetAliases();
aliases.setAlias('safe-data', '/path/safe');
const before = aliases.loadAliases();
assert.ok(before.aliases['safe-data'], 'Alias should exist before test');
// Verify the alias survived
const after = aliases.loadAliases();
assert.ok(after.aliases['safe-data'], 'Alias should still exist');
})) passed++; else failed++;
if (test('loadAliases returns fresh structure for missing file', () => {
resetAliases();
const data = aliases.loadAliases();
assert.ok(data, 'Should return an object');
assert.ok(data.aliases, 'Should have aliases key');
assert.ok(data.metadata, 'Should have metadata key');
assert.strictEqual(typeof data.aliases, 'object');
assert.strictEqual(Object.keys(data.aliases).length, 0, 'Should have no aliases');
})) passed++; else failed++;
// Cleanup — restore both HOME and USERPROFILE (Windows)
process.env.HOME = origHome;
if (origUserProfile !== undefined) {