Files
get-shit-done/tests/bug-2439-set-profile-gsd-sdk-preflight.test.cjs
Jeremy McSpadden 708f60874e fix(set-profile): use hyphenated /gsd-set-profile in pre-flight message
Project convention (#1748) requires /gsd-<cmd> hyphen form everywhere
except designated test inputs. Fix the colon references in the
pre-flight error and its regression test to satisfy stale-colon-refs.
2026-04-19 15:40:50 -05:00

55 lines
2.0 KiB
JavaScript

/**
* Regression test for bug #2439
*
* /gsd-set-profile crashed with `command not found: gsd-sdk` when the
* gsd-sdk binary was not installed or not in PATH. The command body
* invoked `gsd-sdk query config-set-model-profile` directly with no
* pre-flight check, so missing gsd-sdk produced an opaque shell error.
*
* Fix mirrors bug #2334: guard the invocation with `command -v gsd-sdk`
* and emit an install hint when absent.
*/
'use strict';
const { test, describe } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('fs');
const path = require('path');
const COMMAND_PATH = path.join(__dirname, '..', 'commands', 'gsd', 'set-profile.md');
describe('bug #2439: /gsd-set-profile gsd-sdk pre-flight check', () => {
const content = fs.readFileSync(COMMAND_PATH, 'utf-8');
test('command file exists', () => {
assert.ok(fs.existsSync(COMMAND_PATH), 'commands/gsd/set-profile.md should exist');
});
test('guards gsd-sdk invocation with command -v check', () => {
const sdkCall = content.indexOf('gsd-sdk query config-set-model-profile');
assert.ok(sdkCall !== -1, 'gsd-sdk query config-set-model-profile must be present');
const preamble = content.slice(0, sdkCall);
assert.ok(
preamble.includes('command -v gsd-sdk') || preamble.includes('which gsd-sdk'),
'set-profile must check for gsd-sdk in PATH before invoking it. ' +
'Without this guard the command crashes with exit 127 when gsd-sdk ' +
'is not installed (root cause of #2439).'
);
});
test('pre-flight error message references install/update path', () => {
const sdkCall = content.indexOf('gsd-sdk query config-set-model-profile');
const preamble = content.slice(0, sdkCall);
const hasInstallHint =
preamble.includes('@gsd-build/sdk') ||
preamble.includes('gsd-update') ||
preamble.includes('/gsd-update');
assert.ok(
hasInstallHint,
'Pre-flight error must point users at `npm install -g @gsd-build/sdk` or `/gsd-update`.'
);
});
});