UNPKG

validata

Version:

Type safe data validation and sanitization

144 lines 6.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const luxon_1 = require("luxon"); const array_1 = require("./array"); const boolean_1 = require("./boolean"); const check_1 = require("./check"); const common_1 = require("./common"); const date_1 = require("./date"); const date_time_1 = require("./date-time"); const number_1 = require("./number"); const object_1 = require("./object"); const record_1 = require("./record"); const string_1 = require("./string"); const test_helpers_1 = require("./test-helpers"); const tuple_1 = require("./tuple"); const url_1 = require("./url"); describe('common tests', () => { const dateTime = luxon_1.DateTime.local(); const date = new Date(); const url = new URL('http://localhost'); const testCases = [ [array_1.isArray, ['a', 'b']], [array_1.maybeArray, undefined], [array_1.asArray, 'a'], [array_1.maybeAsArray, undefined], [boolean_1.isBoolean, true], [boolean_1.maybeBoolean, undefined], [boolean_1.asBoolean, 'false'], [boolean_1.maybeAsBoolean, undefined], [date_time_1.isDateTime, dateTime], [date_time_1.maybeDateTime, undefined], [date_time_1.asDateTime, dateTime.toISO()], [date_time_1.maybeAsDateTime, undefined], [date_1.isDate, date], [date_1.maybeDate, undefined], [date_1.asDate, date.toISOString()], [date_1.maybeAsDate, undefined], [number_1.isNumber, 5], [number_1.maybeNumber, undefined], [number_1.asNumber, '5'], [number_1.maybeAsNumber, undefined], [object_1.isObject, { a: 1, b: '2' }], [object_1.maybeObject, undefined], [object_1.asObject, '{ "a": 42 }', { a: (0, number_1.isNumber)() }], [object_1.maybeAsObject, undefined], [record_1.isRecord, { a: 1, b: '2' }], [record_1.maybeRecord, undefined], [string_1.isString, 'asd'], [string_1.maybeString, undefined], [string_1.asString, 'asd'], [string_1.maybeAsString, undefined], [tuple_1.isTuple, [2], [(0, number_1.isNumber)()]], [tuple_1.maybeTuple, undefined], [url_1.isUrl, url], [url_1.maybeUrl, undefined], [url_1.asUrl, url.toString()], [url_1.maybeAsUrl, undefined], ]; describe('createNullableCheck', () => { it.each(testCases)('createIsNullableCheck %#', (check, value, contract = undefined) => { const fut = check(contract); const futNull = (0, common_1.isNullable)(check(contract)); (0, test_helpers_1.expectValue)(futNull, null, null); expect(fut.process(value)).toEqual(futNull.process(value)); }); it.each([ [array_1.maybeArray], [array_1.maybeArray, undefined, [1, 2, 3]], [array_1.maybeArray, [1, 2, 3], null, [1, 2, 3]], [array_1.maybeAsArray], [array_1.maybeAsArray, undefined, [1, 2, 3]], [array_1.maybeAsArray, [1, 2, 3], null, [1, 2, 3]], [boolean_1.maybeBoolean], [boolean_1.maybeBoolean, undefined, true], [boolean_1.maybeBoolean, true, null, true], [boolean_1.maybeAsBoolean], [boolean_1.maybeAsBoolean, undefined, true], [boolean_1.maybeAsBoolean, 'true', null, true], [date_time_1.maybeDateTime], [date_time_1.maybeDateTime, undefined, dateTime], [date_time_1.maybeDateTime, dateTime, null, dateTime], [date_time_1.maybeAsDateTime], [date_time_1.maybeAsDateTime, undefined, dateTime], [date_time_1.maybeAsDateTime, dateTime, null, dateTime], [date_1.maybeDate], [date_1.maybeDate, undefined, date], [date_1.maybeDate, date, null, date], [date_1.maybeAsDate], [date_1.maybeAsDate, undefined, date], [date_1.maybeAsDate, date.toISOString(), null, date], [number_1.maybeNumber], [number_1.maybeNumber, undefined, 5], [number_1.maybeNumber, 5, null, 5], [number_1.maybeAsNumber], [number_1.maybeAsNumber, undefined, 5], [number_1.maybeAsNumber, undefined, () => 5, 5], [number_1.maybeAsNumber, '5', null, 5], [object_1.maybeObject], [object_1.maybeObject, undefined, { key: 'value' }], [object_1.maybeObject, { key: 'value' }, null, { key: 'value' }], [object_1.maybeAsObject], [object_1.maybeAsObject, undefined, { key: 'value' }], [object_1.maybeAsObject, { key: 'value' }, null, { key: 'value' }], [record_1.maybeRecord], [record_1.maybeRecord, undefined, { key: 'value' }], [record_1.maybeRecord, { key: 'value' }, null, { key: 'value' }], [string_1.maybeString], [string_1.maybeString, undefined, 'string'], [string_1.maybeString, 'string', null, 'string'], [string_1.maybeAsString], [string_1.maybeAsString, undefined, 'string'], [string_1.maybeAsString, 'string', null, 'string'], [tuple_1.maybeTuple], [tuple_1.maybeTuple, undefined, [1, 'text'], [1, 'text'], [(0, number_1.isNumber)(), (0, string_1.isString)()]], [tuple_1.maybeTuple, [1, 'text'], null, [1, 'text'], [(0, number_1.isNumber)(), (0, string_1.isString)()]], [url_1.maybeUrl], [url_1.maybeUrl, undefined, url], [url_1.maybeUrl, url, null, url], [url_1.maybeAsUrl], [url_1.maybeAsUrl, undefined, url], [url_1.maybeAsUrl, url.toString(), null, url], ])('createAsNullableCheck %#', (check, value = undefined, defaultValue = null, expectedValue = defaultValue, contract = undefined) => { const futNull = (0, common_1.asNullable)(check(contract), { default: defaultValue }); expect(futNull.process(value)).toEqual({ value: expectedValue }); }); it('result is intact during an issue detection', () => { const fut = (0, object_1.isObject)({ key: (0, boolean_1.isBoolean)() }); const futNull = (0, object_1.isObject)({ key: (0, common_1.asNullable)((0, boolean_1.isBoolean)()) }); const result = fut.process({ key: [] }); const resultNull = futNull.process({ key: [] }); expect(result).toEqual(resultNull); }); }); describe('checkAsync', () => { it.each(testCases)('async check run %#', async (check, value, contract = undefined) => { const futAsync = { process: (value) => Promise.resolve(check(contract).process(value)), }; const result = (0, check_1.checkAsync)(futAsync, () => Promise.resolve(value)); await expect(result).resolves.not.toThrow(); }); }); }); //# sourceMappingURL=common.test.js.map