UNPKG

speckoloo

Version:
152 lines (125 loc) 9.98 kB
'use strict'; var _ava = require('ava'); var _validate = require('./validate'); var _validate2 = _interopRequireDefault(_validate); var _defaultValidators = require('./default-validators'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } (0, _ava.test)('Given valid data for a schema, when `validate` is called, then it should not throw and return the object itself', t => { const schema = { prop1: { validator: _defaultValidators.allowAny } }; const data = { prop1: 'a' }; const result = (0, _validate2.default)(schema, data); t.is(result, data); }); (0, _ava.test)('Given missing data for field in a schema with `skippable` = true for such field, when `validate` is called, then it should not throw and return the object itself', t => { const schema = { prop1: { validator: _defaultValidators.allowAny }, prop2: { validator: _defaultValidators.forbidAny, skippable: true } }; const data = { prop1: 'a' }; const result = (0, _validate2.default)(schema, data); t.is(result, data); }); (0, _ava.test)('Given invalid data for a schema, when `validate` is called, then it should throw an error describing all validation errors within the `details` property', (() => { var _ref = _asyncToGenerator(function* (t) { const schema = { prop1: { validator: _defaultValidators.forbidAny }, prop2: { validator: _defaultValidators.forbidAny } }; const data = { prop1: 'a', prop2: 'b' }; const error = yield t.throws(function () { return (0, _validate2.default)(schema, data); }); t.is(error.code, 'ERR_VALIDATION'); t.true(error.details.hasOwnProperty('prop1')); t.true(error.details.hasOwnProperty('prop2')); }); return function (_x) { return _ref.apply(this, arguments); }; })()); (0, _ava.test)('Given validator returning falsy for valid data, when `validate` is called for valid instance, then it should not throw an error', (() => { var _ref2 = _asyncToGenerator(function* (t) { const schema = { prop1: { validator: function validator() { return undefined; } }, prop2: { validator: function validator() { return false; } }, prop3: { validator: function validator() { return null; } }, prop4: { validator: function validator() { return ''; } } }; const data = { prop1: 'a', prop2: 'b', prop3: 'c', prop4: 'd' }; t.notThrows(function () { return (0, _validate2.default)(schema, data); }); }); return function (_x2) { return _ref2.apply(this, arguments); }; })()); (0, _ava.test)('Given validator returning a truthy non-object value for valid data, when `validate` is called for valid instance, then it should not throw an error', (() => { var _ref3 = _asyncToGenerator(function* (t) { const schema = { prop1: { validator: function validator() { return 'OK'; } }, prop2: { validator: function validator() { return 'OK'; } } }; const data = { prop1: 'a', prop2: 'b' }; t.notThrows(function () { return (0, _validate2.default)(schema, data); }); }); return function (_x3) { return _ref3.apply(this, arguments); }; })()); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92YWxpZGF0ZS50ZXN0LmpzIl0sIm5hbWVzIjpbInQiLCJzY2hlbWEiLCJwcm9wMSIsInZhbGlkYXRvciIsImRhdGEiLCJyZXN1bHQiLCJpcyIsInByb3AyIiwic2tpcHBhYmxlIiwiZXJyb3IiLCJ0aHJvd3MiLCJjb2RlIiwidHJ1ZSIsImRldGFpbHMiLCJoYXNPd25Qcm9wZXJ0eSIsInVuZGVmaW5lZCIsInByb3AzIiwicHJvcDQiLCJub3RUaHJvd3MiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsZUFBSyxpSEFBTCxFQUF3SEEsS0FBSztBQUMzSCxRQUFNQyxTQUFTO0FBQ2JDLFdBQU87QUFDTEM7QUFESztBQURNLEdBQWY7O0FBTUEsUUFBTUMsT0FBTztBQUNYRixXQUFPO0FBREksR0FBYjs7QUFJQSxRQUFNRyxTQUFTLHdCQUFRSixNQUFSLEVBQWdCRyxJQUFoQixDQUFmOztBQUVBSixJQUFFTSxFQUFGLENBQUtELE1BQUwsRUFBYUQsSUFBYjtBQUNELENBZEQ7O0FBZ0JBLGVBQUssbUtBQUwsRUFBMEtKLEtBQUs7QUFDN0ssUUFBTUMsU0FBUztBQUNiQyxXQUFPO0FBQ0xDO0FBREssS0FETTtBQUliSSxXQUFPO0FBQ0xKLDZDQURLO0FBRUxLLGlCQUFXO0FBRk47QUFKTSxHQUFmOztBQVVBLFFBQU1KLE9BQU87QUFDWEYsV0FBTztBQURJLEdBQWI7O0FBSUEsUUFBTUcsU0FBUyx3QkFBUUosTUFBUixFQUFnQkcsSUFBaEIsQ0FBZjs7QUFFQUosSUFBRU0sRUFBRixDQUFLRCxNQUFMLEVBQWFELElBQWI7QUFDRCxDQWxCRDs7QUFvQkEsZUFBSywwSkFBTDtBQUFBLCtCQUFpSyxXQUFNSixDQUFOLEVBQVc7QUFDMUssVUFBTUMsU0FBUztBQUNiQyxhQUFPO0FBQ0xDO0FBREssT0FETTtBQUliSSxhQUFPO0FBQ0xKO0FBREs7QUFKTSxLQUFmOztBQVNBLFVBQU1DLE9BQU87QUFDWEYsYUFBTyxHQURJO0FBRVhLLGFBQU87QUFGSSxLQUFiOztBQUtBLFVBQU1FLFFBQVEsTUFBTVQsRUFBRVUsTUFBRixDQUFTO0FBQUEsYUFBTSx3QkFBUVQsTUFBUixFQUFnQkcsSUFBaEIsQ0FBTjtBQUFBLEtBQVQsQ0FBcEI7O0FBRUFKLE1BQUVNLEVBQUYsQ0FBS0csTUFBTUUsSUFBWCxFQUFpQixnQkFBakI7QUFDQVgsTUFBRVksSUFBRixDQUFPSCxNQUFNSSxPQUFOLENBQWNDLGNBQWQsQ0FBNkIsT0FBN0IsQ0FBUDtBQUNBZCxNQUFFWSxJQUFGLENBQU9ILE1BQU1JLE9BQU4sQ0FBY0MsY0FBZCxDQUE2QixPQUE3QixDQUFQO0FBQ0QsR0FwQkQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBc0JBLGVBQUssaUlBQUw7QUFBQSxnQ0FBd0ksV0FBTWQsQ0FBTixFQUFXO0FBQ2pKLFVBQU1DLFNBQVM7QUFDYkMsYUFBTztBQUNMQyxtQkFBVztBQUFBLGlCQUFNWSxTQUFOO0FBQUE7QUFETixPQURNO0FBSWJSLGFBQU87QUFDTEosbUJBQVc7QUFBQSxpQkFBTSxLQUFOO0FBQUE7QUFETixPQUpNO0FBT2JhLGFBQU87QUFDTGIsbUJBQVc7QUFBQSxpQkFBTSxJQUFOO0FBQUE7QUFETixPQVBNO0FBVWJjLGFBQU87QUFDTGQsbUJBQVc7QUFBQSxpQkFBTSxFQUFOO0FBQUE7QUFETjtBQVZNLEtBQWY7O0FBZUEsVUFBTUMsT0FBTztBQUNYRixhQUFPLEdBREk7QUFFWEssYUFBTyxHQUZJO0FBR1hTLGFBQU8sR0FISTtBQUlYQyxhQUFPO0FBSkksS0FBYjs7QUFPQWpCLE1BQUVrQixTQUFGLENBQVk7QUFBQSxhQUFNLHdCQUFRakIsTUFBUixFQUFnQkcsSUFBaEIsQ0FBTjtBQUFBLEtBQVo7QUFDRCxHQXhCRDs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUEwQkEsZUFBSyxxSkFBTDtBQUFBLGdDQUE0SixXQUFNSixDQUFOLEVBQVc7QUFDckssVUFBTUMsU0FBUztBQUNiQyxhQUFPO0FBQ0xDLG1CQUFXO0FBQUEsaUJBQU0sSUFBTjtBQUFBO0FBRE4sT0FETTtBQUliSSxhQUFPO0FBQ0xKLG1CQUFXO0FBQUEsaUJBQU0sSUFBTjtBQUFBO0FBRE47QUFKTSxLQUFmOztBQVNBLFVBQU1DLE9BQU87QUFDWEYsYUFBTyxHQURJO0FBRVhLLGFBQU87QUFGSSxLQUFiOztBQUtBUCxNQUFFa0IsU0FBRixDQUFZO0FBQUEsYUFBTSx3QkFBUWpCLE1BQVIsRUFBZ0JHLElBQWhCLENBQU47QUFBQSxLQUFaO0FBQ0QsR0FoQkQ7O0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJmaWxlIjoidmFsaWRhdGUudGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRlc3QgfSBmcm9tICdhdmEnXG5pbXBvcnQgc3ViamVjdCBmcm9tICcuL3ZhbGlkYXRlJ1xuaW1wb3J0IHsgYWxsb3dBbnksIGZvcmJpZEFueSB9IGZyb20gJy4vZGVmYXVsdC12YWxpZGF0b3JzJ1xuXG50ZXN0KCdHaXZlbiB2YWxpZCBkYXRhIGZvciBhIHNjaGVtYSwgd2hlbiBgdmFsaWRhdGVgIGlzIGNhbGxlZCwgdGhlbiBpdCBzaG91bGQgbm90IHRocm93IGFuZCByZXR1cm4gdGhlIG9iamVjdCBpdHNlbGYnLCB0ID0+IHtcbiAgY29uc3Qgc2NoZW1hID0ge1xuICAgIHByb3AxOiB7XG4gICAgICB2YWxpZGF0b3I6IGFsbG93QW55XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IHtcbiAgICBwcm9wMTogJ2EnXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBzdWJqZWN0KHNjaGVtYSwgZGF0YSlcblxuICB0LmlzKHJlc3VsdCwgZGF0YSlcbn0pXG5cbnRlc3QoJ0dpdmVuIG1pc3NpbmcgZGF0YSBmb3IgZmllbGQgaW4gYSBzY2hlbWEgd2l0aCBgc2tpcHBhYmxlYCA9IHRydWUgZm9yIHN1Y2ggZmllbGQsIHdoZW4gYHZhbGlkYXRlYCBpcyBjYWxsZWQsIHRoZW4gaXQgc2hvdWxkIG5vdCB0aHJvdyBhbmQgcmV0dXJuIHRoZSBvYmplY3QgaXRzZWxmJywgdCA9PiB7XG4gIGNvbnN0IHNjaGVtYSA9IHtcbiAgICBwcm9wMToge1xuICAgICAgdmFsaWRhdG9yOiBhbGxvd0FueVxuICAgIH0sXG4gICAgcHJvcDI6IHtcbiAgICAgIHZhbGlkYXRvcjogZm9yYmlkQW55LFxuICAgICAgc2tpcHBhYmxlOiB0cnVlXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IHtcbiAgICBwcm9wMTogJ2EnXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBzdWJqZWN0KHNjaGVtYSwgZGF0YSlcblxuICB0LmlzKHJlc3VsdCwgZGF0YSlcbn0pXG5cbnRlc3QoJ0dpdmVuIGludmFsaWQgZGF0YSBmb3IgYSBzY2hlbWEsIHdoZW4gYHZhbGlkYXRlYCBpcyBjYWxsZWQsIHRoZW4gaXQgc2hvdWxkIHRocm93IGFuIGVycm9yIGRlc2NyaWJpbmcgYWxsIHZhbGlkYXRpb24gZXJyb3JzIHdpdGhpbiB0aGUgYGRldGFpbHNgIHByb3BlcnR5JywgYXN5bmMgdCA9PiB7XG4gIGNvbnN0IHNjaGVtYSA9IHtcbiAgICBwcm9wMToge1xuICAgICAgdmFsaWRhdG9yOiBmb3JiaWRBbnlcbiAgICB9LFxuICAgIHByb3AyOiB7XG4gICAgICB2YWxpZGF0b3I6IGZvcmJpZEFueVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgcHJvcDE6ICdhJyxcbiAgICBwcm9wMjogJ2InXG4gIH1cblxuICBjb25zdCBlcnJvciA9IGF3YWl0IHQudGhyb3dzKCgpID0+IHN1YmplY3Qoc2NoZW1hLCBkYXRhKSlcblxuICB0LmlzKGVycm9yLmNvZGUsICdFUlJfVkFMSURBVElPTicpXG4gIHQudHJ1ZShlcnJvci5kZXRhaWxzLmhhc093blByb3BlcnR5KCdwcm9wMScpKVxuICB0LnRydWUoZXJyb3IuZGV0YWlscy5oYXNPd25Qcm9wZXJ0eSgncHJvcDInKSlcbn0pXG5cbnRlc3QoJ0dpdmVuIHZhbGlkYXRvciByZXR1cm5pbmcgZmFsc3kgZm9yIHZhbGlkIGRhdGEsIHdoZW4gYHZhbGlkYXRlYCBpcyBjYWxsZWQgZm9yIHZhbGlkIGluc3RhbmNlLCB0aGVuIGl0IHNob3VsZCBub3QgdGhyb3cgYW4gZXJyb3InLCBhc3luYyB0ID0+IHtcbiAgY29uc3Qgc2NoZW1hID0ge1xuICAgIHByb3AxOiB7XG4gICAgICB2YWxpZGF0b3I6ICgpID0+IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgcHJvcDI6IHtcbiAgICAgIHZhbGlkYXRvcjogKCkgPT4gZmFsc2VcbiAgICB9LFxuICAgIHByb3AzOiB7XG4gICAgICB2YWxpZGF0b3I6ICgpID0+IG51bGxcbiAgICB9LFxuICAgIHByb3A0OiB7XG4gICAgICB2YWxpZGF0b3I6ICgpID0+ICcnXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IHtcbiAgICBwcm9wMTogJ2EnLFxuICAgIHByb3AyOiAnYicsXG4gICAgcHJvcDM6ICdjJyxcbiAgICBwcm9wNDogJ2QnXG4gIH1cblxuICB0Lm5vdFRocm93cygoKSA9PiBzdWJqZWN0KHNjaGVtYSwgZGF0YSkpXG59KVxuXG50ZXN0KCdHaXZlbiB2YWxpZGF0b3IgcmV0dXJuaW5nIGEgdHJ1dGh5IG5vbi1vYmplY3QgdmFsdWUgZm9yIHZhbGlkIGRhdGEsIHdoZW4gYHZhbGlkYXRlYCBpcyBjYWxsZWQgZm9yIHZhbGlkIGluc3RhbmNlLCB0aGVuIGl0IHNob3VsZCBub3QgdGhyb3cgYW4gZXJyb3InLCBhc3luYyB0ID0+IHtcbiAgY29uc3Qgc2NoZW1hID0ge1xuICAgIHByb3AxOiB7XG4gICAgICB2YWxpZGF0b3I6ICgpID0+ICdPSydcbiAgICB9LFxuICAgIHByb3AyOiB7XG4gICAgICB2YWxpZGF0b3I6ICgpID0+ICdPSydcbiAgICB9XG4gIH1cblxuICBjb25zdCBkYXRhID0ge1xuICAgIHByb3AxOiAnYScsXG4gICAgcHJvcDI6ICdiJ1xuICB9XG5cbiAgdC5ub3RUaHJvd3MoKCkgPT4gc3ViamVjdChzY2hlbWEsIGRhdGEpKVxufSlcbiJdfQ==