speckoloo
Version:
Domain entites inspired by Speck
152 lines (125 loc) • 9.98 kB
JavaScript
;
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==