Files
freeCodeCamp/client/src/utils/handled-error.test.ts
2021-09-27 14:32:42 +05:30

73 lines
2.3 KiB
TypeScript

import { isObject } from 'lodash-es';
import {
isHandledError,
wrapHandledError,
unwrapHandledError,
handledErrorSymbol
} from './handled-error';
import type { HandledError } from './handled-error';
describe('client/src utilities', () => {
describe('handled-error.js', () => {
const mockHandledErrorData = {
type: 'info',
message: 'something helpful',
redirectTo: '/a-path-we-choose'
};
describe('isHandledError', () => {
it('returns a boolean', () => {
expect(typeof isHandledError({} as Error)).toEqual('boolean');
});
it('returns false for an unhandled error', () => {
expect(isHandledError(new Error())).toEqual(false);
});
it('returns true for a handled error', () => {
const handledError = new Error() as HandledError;
handledError[handledErrorSymbol] = {};
expect(isHandledError(handledError)).toEqual(true);
});
});
describe('wrapHandledError', () => {
// this is testing implementation details 👎
// we need to make these tests more robust 💪
it('returns an error with a handledError property', () => {
const handledError = wrapHandledError(
new Error() as HandledError,
mockHandledErrorData
);
expect(handledErrorSymbol in handledError).toEqual(true);
});
it('assigns error handling details to the handledError property', () => {
const handledError = wrapHandledError(
new Error() as HandledError,
mockHandledErrorData
);
expect(handledError[handledErrorSymbol]).toEqual(mockHandledErrorData);
});
});
describe('unwrapHandledError', () => {
// this is testing implementation details 👎
// we need to make these tests more robust 💪
it('returns an object by default', () => {
const error = new Error() as HandledError;
const unwrappedError = unwrapHandledError(error);
expect(isObject(unwrappedError)).toBe(true);
});
it('returns the data that was wrapped in the error', () => {
const handledError = new Error() as HandledError;
handledError[handledErrorSymbol] = mockHandledErrorData;
const unwrapped = unwrapHandledError(handledError);
expect(unwrapped).toEqual(mockHandledErrorData);
});
});
});
});