Chore: Small todo about coerce boolean (#1789)

* fix: coerce boolean types negative number is false

* strict coerce
This commit is contained in:
Alex Christoffer Rasmussen
2025-09-24 19:52:55 +02:00
parent 343697dc93
commit 971c6c66f0
2 changed files with 23 additions and 10 deletions
@@ -145,16 +145,25 @@ describe('coerce unknown value to a boolean', () => {
expect(coerceBoolean('')).toStrictEqual(false); expect(coerceBoolean('')).toStrictEqual(false);
}); });
test('true numbers', () => { test('invalid strings', () => {
expect(coerceBoolean(1)).toStrictEqual(true); expect(() => coerceBoolean('bla')).toThrowError('Invalid value received');
expect(coerceBoolean(2)).toStrictEqual(true); expect(() => coerceBoolean(' ')).toThrowError('Invalid value received');
expect(coerceBoolean(100000)).toStrictEqual(true);
}); });
test.todo('false numbers', () => { test('true numbers', () => {
expect(coerceBoolean(1)).toStrictEqual(true);
});
test('false numbers', () => {
expect(coerceBoolean(0)).toStrictEqual(false); expect(coerceBoolean(0)).toStrictEqual(false);
expect(coerceBoolean(-1)).toStrictEqual(false); });
expect(coerceBoolean(-10000)).toStrictEqual(false);
test('invalid numbers', () => {
expect(() => coerceBoolean(0.5)).toThrowError('Invalid value received');
expect(() => coerceBoolean(-1)).toThrowError('Invalid value received');
expect(() => coerceBoolean(2)).toThrowError('Invalid value received');
expect(() => coerceBoolean(NaN)).toThrowError('Invalid value received');
expect(() => coerceBoolean(Infinity)).toThrowError('Invalid value received');
}); });
test('booleans', () => { test('booleans', () => {
+7 -3
View File
@@ -33,8 +33,8 @@ export function coerceString(value: unknown): string {
* @throws {Error} Throws an error if the value is null or undefined. * @throws {Error} Throws an error if the value is null or undefined.
*/ */
export function coerceBoolean(value: unknown): boolean { export function coerceBoolean(value: unknown): boolean {
if (value === undefined || typeof value === 'object') { if (typeof value === 'boolean') {
throw new Error('Invalid value received'); return value;
} }
if (typeof value === 'string') { if (typeof value === 'string') {
const lowerCaseValue = value.toLocaleLowerCase(); const lowerCaseValue = value.toLocaleLowerCase();
@@ -52,7 +52,11 @@ export function coerceBoolean(value: unknown): boolean {
throw new Error('Invalid value received'); throw new Error('Invalid value received');
} }
} }
return Boolean(value); if (typeof value === 'number') {
if (value === 0) return false;
if (value === 1) return true;
}
throw new Error('Invalid value received');
} }
/** /**