computed-types
Version:
Runtime validation types for TypeScript.
113 lines (72 loc) • 13.6 kB
JavaScript
;
require("mocha");
var _chai = require("chai");
var _utils = require("./schema/utils");
var _chaiAsPromised = _interopRequireDefault(require("chai-as-promised"));
var _array = _interopRequireDefault(require("./array"));
var _errors = require("./schema/errors");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
(0, _chai.use)(_chaiAsPromised.default);
/* eslint-disable @typescript-eslint/no-explicit-any */
describe('array', () => {
it('array()', () => {
(0, _utils.typeCheck)('ok');
_chai.assert.deepEqual((0, _array.default)([]), []);
_chai.assert.deepEqual((0, _array.default)(['foo']), ['foo']);
_chai.assert.throws(() => (0, _array.default)(null), _errors.ValidationError);
_chai.assert.throws(() => (0, _array.default)(undefined), _errors.ValidationError);
_chai.assert.throws(() => (0, _array.default)({}), _errors.ValidationError);
_chai.assert.throws(() => (0, _array.default)({
foo: 1
}), _errors.ValidationError);
_chai.assert.throws(() => (0, _array.default)(122), _errors.ValidationError);
_chai.assert.throws(() => (0, _array.default)('ddd'), _errors.ValidationError);
_chai.assert.throws(() => (0, _array.default)(true), _errors.ValidationError);
_chai.assert.throws(() => (0, _array.default)(false), _errors.ValidationError);
});
it('array.min()', () => {
_chai.assert.deepEqual(_array.default.min(3)([1, 2, 3]), [1, 2, 3]);
_chai.assert.deepEqual(_array.default.min(3)([1, 2, 3, 4]), [1, 2, 3, 4]);
_chai.assert.throws(() => _array.default.min(3)([1, 2]), _errors.ValidationError);
_chai.assert.throws(() => _array.default.min(1, 'test')([]), _errors.ValidationError, 'test');
});
it('array.max()', () => {
_chai.assert.deepEqual(_array.default.max(3)([1, 2, 3]), [1, 2, 3]);
_chai.assert.deepEqual(_array.default.max(3)([1, 2]), [1, 2]);
_chai.assert.deepEqual(_array.default.max(3)([]), []);
_chai.assert.throws(() => _array.default.max(3)([1, 2, 3, 4]), _errors.ValidationError);
_chai.assert.throws(() => _array.default.max(0, 'test')([1]), _errors.ValidationError, 'test');
});
it('array.between()', () => {
_chai.assert.deepEqual(_array.default.between(1, 3)([1, 2, 3]), [1, 2, 3]);
_chai.assert.deepEqual(_array.default.between(1, 3)([1, 2]), [1, 2]);
_chai.assert.deepEqual(_array.default.between(1, 3)([1]), [1]);
_chai.assert.throws(() => _array.default.between(1, 3)([]), _errors.ValidationError);
_chai.assert.throws(() => _array.default.between(0, 3, 'test')([1, 2, 3, 4]), _errors.ValidationError, 'test');
});
it('array.of()', () => {
const fooArr = _array.default.of('foo');
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
_chai.assert.deepEqual(fooArr(['foo']), ['foo']);
_chai.assert.deepEqual(fooArr([]), []);
_chai.assert.deepEqual(fooArr(['foo', 'foo']), ['foo', 'foo']);
_chai.assert.throws(() => fooArr(['foo', 'bar']), _errors.ValidationError);
_chai.assert.throws(() => fooArr(['foo', 1]), _errors.ValidationError);
});
it('array.of() async', async () => {
const posArr = _array.default.of(async x => {
if (typeof x !== 'number' || x < 0) {
throw new RangeError(`Negative number`);
}
return x;
});
(0, _utils.typeCheck)('ok');
(0, _utils.typeCheck)('ok');
_chai.assert.deepEqual(await posArr([1]), [1]);
_chai.assert.deepEqual(await posArr([1, 0]), [1, 0]);
await _chai.assert.isRejected(posArr([1, -1]), RangeError);
await _chai.assert.isRejected(posArr(['foo', 1]), RangeError);
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hcnJheS50ZXN0LnRzIl0sIm5hbWVzIjpbImNoYWlBc1Byb21pc2VkIiwiZGVzY3JpYmUiLCJpdCIsImFzc2VydCIsImRlZXBFcXVhbCIsInRocm93cyIsIlZhbGlkYXRpb25FcnJvciIsInVuZGVmaW5lZCIsImZvbyIsImFycmF5IiwibWluIiwibWF4IiwiYmV0d2VlbiIsImZvb0FyciIsIm9mIiwicG9zQXJyIiwieCIsIlJhbmdlRXJyb3IiLCJpc1JlamVjdGVkIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsZUFBSUEsdUJBQUo7QUFFQTs7QUFFQUMsUUFBUSxDQUFDLE9BQUQsRUFBVSxNQUFNO0FBQ3RCQyxFQUFBQSxFQUFFLENBQUMsU0FBRCxFQUFZLE1BQU07QUFDbEIsMEJBQXFELElBQXJEOztBQUVBQyxpQkFBT0MsU0FBUCxDQUFpQixvQkFBTSxFQUFOLENBQWpCLEVBQTRCLEVBQTVCOztBQUNBRCxpQkFBT0MsU0FBUCxDQUFpQixvQkFBTSxDQUFDLEtBQUQsQ0FBTixDQUFqQixFQUFpQyxDQUFDLEtBQUQsQ0FBakM7O0FBRUFELGlCQUFPRSxNQUFQLENBQWMsTUFBTSxvQkFBTSxJQUFOLENBQXBCLEVBQXdDQyx1QkFBeEM7O0FBQ0FILGlCQUFPRSxNQUFQLENBQWMsTUFBTSxvQkFBTUUsU0FBTixDQUFwQixFQUE2Q0QsdUJBQTdDOztBQUNBSCxpQkFBT0UsTUFBUCxDQUFjLE1BQU0sb0JBQU0sRUFBTixDQUFwQixFQUFzQ0MsdUJBQXRDOztBQUNBSCxpQkFBT0UsTUFBUCxDQUFjLE1BQU0sb0JBQU07QUFBRUcsTUFBQUEsR0FBRyxFQUFFO0FBQVAsS0FBTixDQUFwQixFQUE4Q0YsdUJBQTlDOztBQUNBSCxpQkFBT0UsTUFBUCxDQUFjLE1BQU0sb0JBQU0sR0FBTixDQUFwQixFQUF1Q0MsdUJBQXZDOztBQUNBSCxpQkFBT0UsTUFBUCxDQUFjLE1BQU0sb0JBQU0sS0FBTixD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akMsRUFBb0M7QUFDbEMsY0FBTSxJQUFJQyxVQUFKLENBQWdCLGlCQUFoQixDQUFOO0FBQ0Q7O0FBRUQsYUFBT0QsQ0FBUDtBQUNELEtBTmMsQ0FBZjs7QUFPQSwwQkFBNEQsSUFBNUQ7QUFDQSwwQkFBaUQsSUFBakQ7O0FBRUFiLGlCQUFPQyxTQUFQLENBQWlCLE1BQU1XLE1BQU0sQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUE3QixFQUFvQyxDQUFDLENBQUQsQ0FBcEM7O0FBQ0FaLGlCQUFPQyxTQUFQLENBQWlCLE1BQU1XLE1BQU0sQ0FBQyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUQsQ0FBN0IsRUFBdUMsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUF2Qzs7QUFFQSxVQUFNWixhQUFPZSxVQUFQLENBQWtCSCxNQUFNLENBQUMsQ0FBQyxDQUFELEVBQUksQ0FBQyxDQUFMLENBQUQsQ0FBeEIsRUFBMENFLFVBQTFDLENBQU47QUFDQSxVQUFNZCxhQUFPZSxVQUFQLENBQWtCSCxNQUFNLENBQUMsQ0FBQyxLQUFELEVBQVEsQ0FBUixDQUFELENBQXhCLEVBQTZDRSxVQUE3QyxDQUFOO0FBQ0QsR0FoQkMsQ0FBRjtBQWlCRCxDQTdFTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdtb2NoYSc7XG5pbXBvcnQgeyBhc3NlcnQsIHVzZSB9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHsgdHlwZUNoZWNrIH0gZnJvbSAnLi9zY2hlbWEvdXRpbHMnO1xuaW1wb3J0IGNoYWlBc1Byb21pc2VkIGZyb20gJ2NoYWktYXMtcHJvbWlzZWQnO1xuaW1wb3J0IGFycmF5IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9zY2hlbWEvZXJyb3JzJztcblxudXNlKGNoYWlBc1Byb21pc2VkKTtcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5kZXNjcmliZSgnYXJyYXknLCAoKSA9PiB7XG4gIGl0KCdhcnJheSgpJywgKCkgPT4ge1xuICAgIHR5cGVDaGVjazx0eXBlb2YgYXJyYXksICh4OiB1bmtub3duW10pID0+IHVua25vd25bXT4oJ29rJyk7XG5cbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5KFtdKSwgW10pO1xuICAgIGFzc2VydC5kZWVwRXF1YWwoYXJyYXkoWydmb28nXSksIFsnZm9vJ10pO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheShudWxsIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheSh1bmRlZmluZWQgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFycmF5KHt9IGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheSh7IGZvbzogMSB9IGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheSgxMjIgYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFycmF5KCdkZGQnIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheSh0cnVlIGFzIGFueSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheShmYWxzZSBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICB9KTtcblxuICBpdCgnYXJyYXkubWluKCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChhcnJheS5taW4oMykoWzEsIDIsIDNdKSwgWzEsIDIsIDNdKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5Lm1pbigzKShbMSwgMiwgMywgNF0pLCBbMSwgMiwgMywgNF0pO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheS5taW4oMykoWzEsIDJdKSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFycmF5Lm1pbigxLCAndGVzdCcpKFtdKSwgVmFsaWRhdGlvbkVycm9yLCAndGVzdCcpO1xuICB9KTtcblxuICBpdCgnYXJyYXkubWF4KCknLCAoKSA9PiB7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChhcnJheS5tYXgoMykoWzEsIDIsIDNdKSwgWzEsIDIsIDNdKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5Lm1heCgzKShbMSwgMl0pLCBbMSwgMl0pO1xuICAgIGFzc2VydC5kZWVwRXF1YWwoYXJyYXkubWF4KDMpKFtdKSwgW10pO1xuXG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhcnJheS5tYXgoMykoWzEsIDIsIDMsIDRdKSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFycmF5Lm1heCgwLCAndGVzdCcpKFsxXSksIFZhbGlkYXRpb25FcnJvciwgJ3Rlc3QnKTtcbiAgfSk7XG5cbiAgaXQoJ2FycmF5LmJldHdlZW4oKScsICgpID0+IHtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5LmJldHdlZW4oMSwgMykoWzEsIDIsIDNdKSwgWzEsIDIsIDNdKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5LmJldHdlZW4oMSwgMykoWzEsIDJdKSwgWzEsIDJdKTtcbiAgICBhc3NlcnQuZGVlcEVxdWFsKGFycmF5LmJldHdlZW4oMSwgMykoWzFdKSwgWzFdKTtcblxuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYXJyYXkuYmV0d2VlbigxLCAzKShbXSksIFZhbGlkYXRpb25FcnJvcik7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGFycmF5LmJldHdlZW4oMCwgMywgJ3Rlc3QnKShbMSwgMiwgMywgNF0pLFxuICAgICAgVmFsaWRhdGlvbkVycm9yLFxuICAgICAgJ3Rlc3QnLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdhcnJheS5vZigpJywgKCkgPT4ge1xuICAgIGNvbnN0IGZvb0FyciA9IGFycmF5Lm9mKCdmb28nIGFzIGNvbnN0KTtcbiAgICB0eXBlQ2hlY2s8UmV0dXJuVHlwZTx0eXBlb2YgZm9vQXJyPiwgJ2ZvbydbXT4oJ29rJyk7XG4gICAgdHlwZUNoZWNrPFBhcmFtZXRlcnM8dHlwZW9mIGZvb0Fycj4sIFsnZm9vJ1tdXT4oJ29rJyk7XG5cbiAgICBhc3NlcnQuZGVlcEVxdWFsKGZvb0FycihbJ2ZvbyddKSwgWydmb28nXSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChmb29BcnIoW10pLCBbXSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChmb29BcnIoWydmb28nLCAnZm9vJ10pLCBbJ2ZvbycsICdmb28nXSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvb0FycihbJ2ZvbycsICdiYXInXSBhcyBhbnkpLCBWYWxpZGF0aW9uRXJyb3IpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vQXJyKFsnZm9vJywgMV0gYXMgYW55KSwgVmFsaWRhdGlvbkVycm9yKTtcbiAgfSk7XG5cbiAgaXQoJ2FycmF5Lm9mKCkgYXN5bmMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcG9zQXJyID0gYXJyYXkub2YoYXN5bmMgKHg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fCB4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTmVnYXRpdmUgbnVtYmVyYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4O1xuICAgIH0pO1xuICAgIHR5cGVDaGVjazxSZXR1cm5UeXBlPHR5cGVvZiBwb3NBcnI+LCBQcm9taXNlTGlrZTxudW1iZXJbXT4+KCdvaycpO1xuICAgIHR5cGVDaGVjazxQYXJhbWV0ZXJzPHR5cGVvZiBwb3NBcnI+LCBbbnVtYmVyW11dPignb2snKTtcblxuICAgIGFzc2VydC5kZWVwRXF1YWwoYXdhaXQgcG9zQXJyKFsxXSksIFsxXSk7XG4gICAgYXNzZXJ0LmRlZXBFcXVhbChhd2FpdCBwb3NBcnIoWzEsIDBdKSwgWzEsIDBdKTtcblxuICAgIGF3YWl0IGFzc2VydC5pc1JlamVjdGVkKHBvc0FycihbMSwgLTFdIGFzIGFueSksIFJhbmdlRXJyb3IpO1xuICAgIGF3YWl0IGFzc2VydC5pc1JlamVjdGVkKHBvc0FycihbJ2ZvbycsIDFdIGFzIGFueSksIFJhbmdlRXJyb3IpO1xuICB9KTtcbn0pO1xuIl19