UNPKG

@future-widget-lab/safe-ops

Version:

A set of helper functions for performing operations safely, preventing runtime errors from disrupting your application.

116 lines (111 loc) 2.78 kB
import { safeFindWithErrors } from './safe-find-with-errors.helper'; describe('Unit | Helper | safeFindWithErrors', () => { it.each([ { input: { collection: [1, 2, 3, 4, 5], predicate: (x: number) => x > 3 }, expected: { found: 4, errors: [] } }, { input: { collection: ['apple', 'banana', 'cherry'], predicate: (x: string) => x.startsWith('b') }, expected: { found: 'banana', errors: [] } }, { input: { collection: [10, 20, 30], predicate: (x: number) => { if (x === 20) { throw new Error('Error at 20'); } return x === 30; } }, expected: { found: 30, errors: [{ error: new Error('Error at 20'), item: 20, index: 1 }] } }, { input: { collection: ['x', 'y', 'z'], predicate: (char: string) => { if (char === 'y') { throw new Error('Invalid character'); } return char === 'w'; // No match } }, expected: { found: undefined, errors: [{ error: new Error('Invalid character'), item: 'y', index: 1 }] } }, { input: { collection: [0, 1, 2, 3], predicate: (num: number) => { if (num % 2 === 0) { throw new Error('Even number error'); } return num === 5; // No match } }, expected: { found: undefined, errors: [ { error: new Error('Even number error'), item: 0, index: 0 }, { error: new Error('Even number error'), item: 2, index: 2 } ] } }, { input: { collection: [1, 2, 3, 4], predicate: (num: number) => { if (num === 2) { throw new Error('Error at 2'); } if (num === 4) { throw new Error('Error at 4'); } return num === 3; } }, expected: { found: 3, errors: [{ error: new Error('Error at 2'), item: 2, index: 1 }] } }, { input: { collection: [5, 10, 15], predicate: () => { throw new Error('Always fails'); } }, expected: { found: undefined, errors: [ { error: new Error('Always fails'), item: 5, index: 0 }, { error: new Error('Always fails'), item: 10, index: 1 }, { error: new Error('Always fails'), item: 15, index: 2 } ] } } ])('should return $expected given $input.collection', ({ input, expected }) => { const { collection, predicate } = input; const result = safeFindWithErrors(collection as any, predicate as any); expect(result.found).toEqual(expected.found); expect(result.errors).toHaveLength(expected.errors.length); expected.errors.forEach((expectedError, index) => { expect(result.errors[index].error.message).toBe(expectedError.error.message); expect(result.errors[index].item).toBe(expectedError.item); expect(result.errors[index].index).toBe(expectedError.index); }); }); });