Reject invalid boolean input values (#1160)

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: c6daa6b5-31f5-46b2-a994-b8320b50a50d
This commit is contained in:
Bruno Borges
2026-07-28 22:43:39 -04:00
committed by GitHub
parent 382d4b753d
commit ce75feb3d3
4 changed files with 104 additions and 5 deletions
+65 -1
View File
@@ -57,9 +57,73 @@ const {
isCacheFeatureAvailable, isCacheFeatureAvailable,
isGhes, isGhes,
validatePaginationUrl, validatePaginationUrl,
getLatestMajorVersion getLatestMajorVersion,
getBooleanInput
} = await import('../src/util.js'); } = await import('../src/util.js');
describe('getBooleanInput', () => {
let inputs: Record<string, string>;
beforeEach(() => {
inputs = {};
(core.getInput as jest.Mock).mockImplementation(
(name: string) => inputs[name] ?? ''
);
});
afterEach(() => {
jest.resetAllMocks();
});
it.each([
['true', true],
['TRUE', true],
['TrUe', true],
[' true ', true],
['false', false],
['FALSE', false],
['FaLsE', false],
[' false ', false]
])('parses %j as %s', (value: string, expected: boolean) => {
inputs['boolean-input'] = value;
expect(getBooleanInput('boolean-input')).toBe(expected);
});
it.each([
[undefined, false],
[false, false],
[true, true]
])(
'uses the configured default %s when the input is omitted',
(defaultValue: boolean | undefined, expected: boolean) => {
expect(getBooleanInput('boolean-input', defaultValue)).toBe(expected);
}
);
it('uses the configured default for a whitespace-only input', () => {
inputs['boolean-input'] = ' ';
expect(getBooleanInput('boolean-input', true)).toBe(true);
});
it.each([
'check-latest',
'force-download',
'set-default',
'verify-signature',
'overwrite-settings',
'show-download-progress',
'problem-matcher'
])('rejects an invalid value for %s', inputName => {
inputs[inputName] = 'ture';
expect(() => getBooleanInput(inputName)).toThrow(
`Invalid value 'ture' for boolean input '${inputName}'. Expected 'true' or 'false'.`
);
});
});
describe('isVersionSatisfies', () => { describe('isVersionSatisfies', () => {
it.each([ it.each([
['x', '11.0.0', true], ['x', '11.0.0', true],
+12 -1
View File
@@ -97365,7 +97365,18 @@ function getTempDir() {
return tempDirectory; return tempDirectory;
} }
function util_getBooleanInput(inputName, defaultValue = false) { function util_getBooleanInput(inputName, defaultValue = false) {
return ((core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'); const inputValue = core.getInput(inputName);
const normalizedValue = inputValue.trim().toLowerCase();
if (!normalizedValue) {
return defaultValue;
}
if (normalizedValue === 'true') {
return true;
}
if (normalizedValue === 'false') {
return false;
}
throw new Error(`Invalid value '${inputValue}' for boolean input '${inputName}'. Expected 'true' or 'false'.`);
} }
function getVersionFromToolcachePath(toolPath) { function getVersionFromToolcachePath(toolPath) {
if (toolPath) { if (toolPath) {
+12 -1
View File
@@ -128364,7 +128364,18 @@ function getTempDir() {
return tempDirectory; return tempDirectory;
} }
function util_getBooleanInput(inputName, defaultValue = false) { function util_getBooleanInput(inputName, defaultValue = false) {
return ((getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE'); const inputValue = getInput(inputName);
const normalizedValue = inputValue.trim().toLowerCase();
if (!normalizedValue) {
return defaultValue;
}
if (normalizedValue === 'true') {
return true;
}
if (normalizedValue === 'false') {
return false;
}
throw new Error(`Invalid value '${inputValue}' for boolean input '${inputName}'. Expected 'true' or 'false'.`);
} }
function getVersionFromToolcachePath(toolPath) { function getVersionFromToolcachePath(toolPath) {
if (toolPath) { if (toolPath) {
+15 -2
View File
@@ -20,8 +20,21 @@ export function getTempDir() {
} }
export function getBooleanInput(inputName: string, defaultValue = false) { export function getBooleanInput(inputName: string, defaultValue = false) {
return ( const inputValue = core.getInput(inputName);
(core.getInput(inputName) || String(defaultValue)).toUpperCase() === 'TRUE' const normalizedValue = inputValue.trim().toLowerCase();
if (!normalizedValue) {
return defaultValue;
}
if (normalizedValue === 'true') {
return true;
}
if (normalizedValue === 'false') {
return false;
}
throw new Error(
`Invalid value '${inputValue}' for boolean input '${inputName}'. Expected 'true' or 'false'.`
); );
} }