import { ValidationError } from '~/domain'; import chalk from 'chalk'; const focus = (value: string | RegExp | any[] | null): string => { if (value === null) { return chalk.red('null'); } if (Array.isArray(value)) { return chalk.green(`[ ${value} ]`); } if (value instanceof RegExp) { return chalk.red(`[ ${value} ]`); } return chalk.cyan(`[ ${value} ]`); }; expect.extend({ toBeValidResult: function (result: ValidationError | null) { if (result === null) { return { message: () => `expected result to be invalid, but result is ${focus(result)}`, pass: true, }; } else { return { message: () => `expected result to be valid, but instead it is ${focus(result.erratum)}`, pass: false, }; } }, toHaveInErratum: function (validationError: ValidationError | null, message: string | RegExp) { if (!validationError) { return { message: () => `expected erratum to match [ ${focus(message)} ], but result is valid`, pass: false, }; } else if (!!validationError.erratum.find(error => error.match(message))) { return { message: () => `expected erratum to not include ${focus(message)}`, pass: true, }; } else { return { message: () => `expected erratum to match ${focus(message)}, but erratum is ${focus(validationError.erratum)}`, pass: false, }; } }, });