From 971c6c66f0ac0b663ef09ac51516f64bf6cc1e99 Mon Sep 17 00:00:00 2001 From: Alex Christoffer Rasmussen Date: Wed, 24 Sep 2025 19:52:55 +0200 Subject: [PATCH] Chore: Small todo about coerce boolean (#1789) * fix: coerce boolean types negative number is false * strict coerce --- .../src/utils/__tests__/coerceType.test.ts | 23 +++++++++++++------ apps/server/src/utils/coerceType.ts | 10 +++++--- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/apps/server/src/utils/__tests__/coerceType.test.ts b/apps/server/src/utils/__tests__/coerceType.test.ts index 51086580e..caa3819dd 100644 --- a/apps/server/src/utils/__tests__/coerceType.test.ts +++ b/apps/server/src/utils/__tests__/coerceType.test.ts @@ -145,16 +145,25 @@ describe('coerce unknown value to a boolean', () => { expect(coerceBoolean('')).toStrictEqual(false); }); - test('true numbers', () => { - expect(coerceBoolean(1)).toStrictEqual(true); - expect(coerceBoolean(2)).toStrictEqual(true); - expect(coerceBoolean(100000)).toStrictEqual(true); + test('invalid strings', () => { + expect(() => coerceBoolean('bla')).toThrowError('Invalid value received'); + expect(() => coerceBoolean(' ')).toThrowError('Invalid value received'); }); - test.todo('false numbers', () => { + test('true numbers', () => { + expect(coerceBoolean(1)).toStrictEqual(true); + }); + + test('false numbers', () => { 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', () => { diff --git a/apps/server/src/utils/coerceType.ts b/apps/server/src/utils/coerceType.ts index 9103a33dc..930f1a0ff 100644 --- a/apps/server/src/utils/coerceType.ts +++ b/apps/server/src/utils/coerceType.ts @@ -33,8 +33,8 @@ export function coerceString(value: unknown): string { * @throws {Error} Throws an error if the value is null or undefined. */ export function coerceBoolean(value: unknown): boolean { - if (value === undefined || typeof value === 'object') { - throw new Error('Invalid value received'); + if (typeof value === 'boolean') { + return value; } if (typeof value === 'string') { const lowerCaseValue = value.toLocaleLowerCase(); @@ -52,7 +52,11 @@ export function coerceBoolean(value: unknown): boolean { 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'); } /**