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'); } /**