UNPKG

validata

Version:

Type safe data validation and sanitization

96 lines (81 loc) 3.09 kB
import { isString, maybeString } from './string'; import { StringFormat } from './string-format'; import { expectSuccess } from './test-helpers'; import { isIssue, ValueProcessor } from './types'; // cSpell:disable export const expectFormatIssue = <T>(fut: ValueProcessor<T>, value: unknown, expectedFormat: string): void => { const result = fut.process(value); if (!isIssue(result)) { // eslint-disable-next-line no-undef fail('no issue'); } expect(result.issues).toEqual( expect.arrayContaining([ expect.objectContaining({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment info: expect.objectContaining({ expectedFormat, }), reason: 'incorrect-format', }), ]), ); }; describe('StringFormat', () => { describe('ULID', () => { const fut = isString({ format: StringFormat.ULID() }); it('have issues with invalid ULIDs', () => { expectFormatIssue(fut, '', 'ulid'); expectFormatIssue(fut, 'test', 'ulid'); expectFormatIssue(fut, 'test01EFNX7ZQ36RXJV136T0SP4Y77', 'ulid'); expectFormatIssue(fut, '01EFNX7ZQ36RXJV136T0SP4Y77test', 'ulid'); expectFormatIssue(fut, '{01EFNX7ZQ36RXJV136T0SP4Y77}', 'ulid'); expectFormatIssue(fut, '01EFNX7Z-Q36R-XJV1-36T0-SP4Y77', 'ulid'); expectFormatIssue(fut, 'a4beb195-6171-4542-9cc2-1c75f5688095', 'ulid'); }); it('accept ULIDs', () => { expectSuccess(fut, '01EFNX7ZQ36RXJV136T0SP4Y77'); expectSuccess(fut, '01EFNX7SQ8A5YPF2YJDVJTY1H5'); }); }); describe('UUID', () => { const fut = isString({ format: StringFormat.UUID() }); it('have issues with invalid UUIDs', () => { expectFormatIssue(fut, '', 'uuid'); expectFormatIssue(fut, 'test', 'uuid'); expectFormatIssue(fut, 'testa4beb195-6171-4542-9cc2-1c75f5688095', 'uuid'); expectFormatIssue(fut, 'a4beb195-6171-4542-9cc2-1c75f5688095test', 'uuid'); expectFormatIssue(fut, '{a4beb195-6171-4542-9cc2-1c75f5688095}', 'uuid'); }); it('accept UUIDs', () => { expectSuccess(fut, 'b8493e8b-fdf8-4420-ab63-0701a6850da6'); expectSuccess(fut, '52491B51-E733-43A2-BCDE-1CCE35EE82A6'); }); }); describe('email', () => { const fut = isString({ format: StringFormat.email() }); it('have issues with invalid email addresses', () => { expectFormatIssue(fut, '', 'email'); expectFormatIssue(fut, 'test', 'email'); expectFormatIssue(fut, 'foo@', 'email'); expectFormatIssue(fut, '@home', 'email'); }); it('accept email addresses', () => { expectSuccess(fut, 'me@work.com'); expectSuccess(fut, 'me@my.home.com'); }); }); }); describe('maybe StringFormat', () => { describe('ULID', () => { const fut = maybeString({ format: StringFormat.ULID() }); it('undefined', () => { expectSuccess(fut, undefined); expectSuccess(fut, null); }); it('value', () => { expectSuccess(fut, '01EFNX7ZQ36RXJV136T0SP4Y77'); expectSuccess(fut, '01EFNX7SQ8A5YPF2YJDVJTY1H5'); }); }); });