speckoloo
Version:
Domain entites inspired by Speck
117 lines (85 loc) • 9.6 kB
JavaScript
'use strict';
var _ava = require('ava');
var _factory = require('./factory');
var _factory2 = _interopRequireDefault(_factory);
var _defaultValidators = require('./default-validators');
var _collectionFactory = require('./collection-factory');
var _collectionFactory2 = _interopRequireDefault(_collectionFactory);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
(0, _ava.test)('Given a single object factory and an array of data, when collection factory is called with raw data, then it should return an entity that is a collection of entities', t => {
const singleSchema = {
prop1: {},
prop2: {}
};
const singleFactory = (0, _factory2.default)(singleSchema);
const collectionFactory = (0, _collectionFactory2.default)(singleFactory);
const validData = [{
prop1: 'a',
prop2: 'b'
}, {
prop1: 'c',
prop2: 'd'
}];
const result = collectionFactory(validData);
t.deepEqual(result.toJSON(), validData);
});
(0, _ava.test)('Given a single object factory and an array of data, when collection factory is called with an instance of the collection, then it should return an entity that is a collection of entities', t => {
const singleSchema = {
prop1: {},
prop2: {}
};
const singleFactory = (0, _factory2.default)(singleSchema);
const collectionFactory = (0, _collectionFactory2.default)(singleFactory);
const validDataWithInstance = collectionFactory([{
prop1: 'a',
prop2: 'b'
}, {
prop1: 'c',
prop2: 'd'
}]);
const result = collectionFactory(validDataWithInstance);
t.deepEqual(result.toJSON(), validDataWithInstance.toJSON());
});
(0, _ava.test)('Given a single object factory and an array of invalid data, when `validate()` is called, then it should throw an error for each one of the invalid entity', t => {
const singleSchema = {
prop1: {
validator: _defaultValidators.forbidAny
},
prop2: {
validator: _defaultValidators.forbidAny
}
};
const singleFactory = (0, _factory2.default)(singleSchema);
const collectionFactory = (0, _collectionFactory2.default)(singleFactory);
const validData = [{
prop1: 'a',
prop2: 'b'
}, {
prop1: 'c',
prop2: 'd'
}];
const result = collectionFactory(validData);
const errors = t.throws(() => result.validate());
t.truthy(errors.details['item#0'].prop1);
t.truthy(errors.details['item#0'].prop2);
t.truthy(errors.details['item#1'].prop1);
t.truthy(errors.details['item#1'].prop2);
});
(0, _ava.test)('Given a single object factory and an array of valid data, when `validate()` is called, then it should not throw and return the entity itself', t => {
const singleSchema = {
prop1: {},
prop2: {}
};
const singleFactory = (0, _factory2.default)(singleSchema);
const collectionFactory = (0, _collectionFactory2.default)(singleFactory);
const validData = [{
prop1: 'a',
prop2: 'b'
}, {
prop1: 'c',
prop2: 'd'
}];
const result = collectionFactory(validData);
t.is(result.validate(), result);
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0aW9uLWZhY3RvcnkudGVzdC5qcyJdLCJuYW1lcyI6WyJ0Iiwic2luZ2xlU2NoZW1hIiwicHJvcDEiLCJwcm9wMiIsInNpbmdsZUZhY3RvcnkiLCJjb2xsZWN0aW9uRmFjdG9yeSIsInZhbGlkRGF0YSIsInJlc3VsdCIsImRlZXBFcXVhbCIsInRvSlNPTiIsInZhbGlkRGF0YVdpdGhJbnN0YW5jZSIsInZhbGlkYXRvciIsImVycm9ycyIsInRocm93cyIsInZhbGlkYXRlIiwidHJ1dGh5IiwiZGV0YWlscyIsImlzIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLGVBQUssdUtBQUwsRUFBOEtBLEtBQUs7QUFDakwsUUFBTUMsZUFBZTtBQUNuQkMsV0FBTyxFQURZO0FBRW5CQyxXQUFPO0FBRlksR0FBckI7O0FBS0EsUUFBTUMsZ0JBQWdCLHVCQUFXSCxZQUFYLENBQXRCOztBQUVBLFFBQU1JLG9CQUFvQixpQ0FBUUQsYUFBUixDQUExQjs7QUFFQSxRQUFNRSxZQUFZLENBQUM7QUFDakJKLFdBQU8sR0FEVTtBQUVqQkMsV0FBTztBQUZVLEdBQUQsRUFHZjtBQUNERCxXQUFPLEdBRE47QUFFREMsV0FBTztBQUZOLEdBSGUsQ0FBbEI7O0FBUUEsUUFBTUksU0FBU0Ysa0JBQWtCQyxTQUFsQixDQUFmOztBQUVBTixJQUFFUSxTQUFGLENBQVlELE9BQU9FLE1BQVAsRUFBWixFQUE2QkgsU0FBN0I7QUFDRCxDQXJCRDs7QUF1QkEsZUFBSyw0TEFBTCxFQUFtTU4sS0FBSztBQUN0TSxRQUFNQyxlQUFlO0FBQ25CQyxXQUFPLEVBRFk7QUFFbkJDLFdBQU87QUFGWSxHQUFyQjs7QUFLQSxRQUFNQyxnQkFBZ0IsdUJBQVdILFlBQVgsQ0FBdEI7O0FBRUEsUUFBTUksb0JBQW9CLGlDQUFRRCxhQUFSLENBQTFCOztBQUVBLFFBQU1NLHdCQUF3Qkwsa0JBQWtCLENBQUM7QUFDL0NILFdBQU8sR0FEd0M7QUFFL0NDLFdBQU87QUFGd0MsR0FBRCxFQUc3QztBQUNERCxXQUFPLEdBRE47QUFFREMsV0FBTztBQUZOLEdBSDZDLENBQWxCLENBQTlCOztBQVFBLFFBQU1JLFNBQVNGLGtCQUFrQksscUJBQWxCLENBQWY7O0FBRUFWLElBQUVRLFNBQUYsQ0FBWUQsT0FBT0UsTUFBUCxFQUFaLEVBQTZCQyxzQkFBc0JELE1BQXRCLEVBQTdCO0FBQ0QsQ0FyQkQ7O0FBdUJBLGVBQUssMkpBQUwsRUFBa0tULEtBQUs7QUFDckssUUFBTUMsZUFBZTtBQUNuQkMsV0FBTztBQUNMUztBQURLLEtBRFk7QUFJbkJSLFdBQU87QUFDTFE7QUFESztBQUpZLEdBQXJCOztBQVNBLFFBQU1QLGdCQUFnQix1QkFBV0gsWUFBWCxDQUF0Qjs7QUFFQSxRQUFNSSxvQkFBb0IsaUNBQVFELGFBQVIsQ0FBMUI7O0FBRUEsUUFBTUUsWUFBWSxDQUFDO0FBQ2pCSixXQUFPLEdBRFU7QUFFakJDLFdBQU87QUFGVSxHQUFELEVBR2Y7QUFDREQsV0FBTyxHQUROO0FBRURDLFdBQU87QUFGTixHQUhlLENBQWxCOztBQVFBLFFBQU1JLFNBQVNGLGtCQUFrQkMsU0FBbEIsQ0FBZjs7QUFFQSxRQUFNTSxTQUFTWixFQUFFYSxNQUFGLENBQVMsTUFBTU4sT0FBT08sUUFBUCxFQUFmLENBQWY7O0FBRUFkLElBQUVlLE1BQUYsQ0FBU0gsT0FBT0ksT0FBUCxDQUFlLFFBQWYsRUFBeUJkLEtBQWxDO0FBQ0FGLElBQUVlLE1BQUYsQ0FBU0gsT0FBT0ksT0FBUCxDQUFlLFFBQWYsRUFBeUJiLEtBQWxDO0FBQ0FILElBQUVlLE1BQUYsQ0FBU0gsT0FBT0ksT0FBUCxDQUFlLFFBQWYsRUFBeUJkLEtBQWxDO0FBQ0FGLElBQUVlLE1BQUYsQ0FBU0gsT0FBT0ksT0FBUCxDQUFlLFFBQWYsRUFBeUJiLEtBQWxDO0FBQ0QsQ0E5QkQ7O0FBZ0NBLGVBQUssOElBQUwsRUFBcUpILEtBQUs7QUFDeEosUUFBTUMsZUFBZTtBQUNuQkMsV0FBTyxFQURZO0FBRW5CQyxXQUFPO0FBRlksR0FBckI7O0FBS0EsUUFBTUMsZ0JBQWdCLHVCQUFXSCxZQUFYLENBQXRCOztBQUVBLFFBQU1JLG9CQUFvQixpQ0FBUUQsYUFBUixDQUExQjs7QUFFQSxRQUFNRSxZQUFZLENBQUM7QUFDakJKLFdBQU8sR0FEVTtBQUVqQkMsV0FBTztBQUZVLEdBQUQsRUFHZjtBQUNERCxXQUFPLEdBRE47QUFFREMsV0FBTztBQUZOLEdBSGUsQ0FBbEI7O0FBUUEsUUFBTUksU0FBU0Ysa0JBQWtCQyxTQUFsQixDQUFmOztBQUVBTixJQUFFaUIsRUFBRixDQUFLVixPQUFPTyxRQUFQLEVBQUwsRUFBd0JQLE1BQXhCO0FBQ0QsQ0FyQkQiLCJmaWxlIjoiY29sbGVjdGlvbi1mYWN0b3J5LnRlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0ZXN0IH0gZnJvbSAnYXZhJ1xuaW1wb3J0IGZhY3RvcnlGb3IgZnJvbSAnLi9mYWN0b3J5J1xuaW1wb3J0IHsgZm9yYmlkQW55IH0gZnJvbSAnLi9kZWZhdWx0LXZhbGlkYXRvcnMnXG5pbXBvcnQgc3ViamVjdCBmcm9tICcuL2NvbGxlY3Rpb24tZmFjdG9yeSdcblxudGVzdCgnR2l2ZW4gYSBzaW5nbGUgb2JqZWN0IGZhY3RvcnkgYW5kIGFuIGFycmF5IG9mIGRhdGEsIHdoZW4gY29sbGVjdGlvbiBmYWN0b3J5IGlzIGNhbGxlZCB3aXRoIHJhdyBkYXRhLCB0aGVuIGl0IHNob3VsZCByZXR1cm4gYW4gZW50aXR5IHRoYXQgaXMgYSBjb2xsZWN0aW9uIG9mIGVudGl0aWVzJywgdCA9PiB7XG4gIGNvbnN0IHNpbmdsZVNjaGVtYSA9IHtcbiAgICBwcm9wMToge30sXG4gICAgcHJvcDI6IHt9XG4gIH1cblxuICBjb25zdCBzaW5nbGVGYWN0b3J5ID0gZmFjdG9yeUZvcihzaW5nbGVTY2hlbWEpXG5cbiAgY29uc3QgY29sbGVjdGlvbkZhY3RvcnkgPSBzdWJqZWN0KHNpbmdsZUZhY3RvcnkpXG5cbiAgY29uc3QgdmFsaWREYXRhID0gW3tcbiAgICBwcm9wMTogJ2EnLFxuICAgIHByb3AyOiAnYidcbiAgfSwge1xuICAgIHByb3AxOiAnYycsXG4gICAgcHJvcDI6ICdkJ1xuICB9XVxuXG4gIGNvbnN0IHJlc3VsdCA9IGNvbGxlY3Rpb25GYWN0b3J5KHZhbGlkRGF0YSlcblxuICB0LmRlZXBFcXVhbChyZXN1bHQudG9KU09OKCksIHZhbGlkRGF0YSlcbn0pXG5cbnRlc3QoJ0dpdmVuIGEgc2luZ2xlIG9iamVjdCBmYWN0b3J5IGFuZCBhbiBhcnJheSBvZiBkYXRhLCB3aGVuIGNvbGxlY3Rpb24gZmFjdG9yeSBpcyBjYWxsZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGUgY29sbGVjdGlvbiwgdGhlbiBpdCBzaG91bGQgcmV0dXJuIGFuIGVudGl0eSB0aGF0IGlzIGEgY29sbGVjdGlvbiBvZiBlbnRpdGllcycsIHQgPT4ge1xuICBjb25zdCBzaW5nbGVTY2hlbWEgPSB7XG4gICAgcHJvcDE6IHt9LFxuICAgIHByb3AyOiB7fVxuICB9XG5cbiAgY29uc3Qgc2luZ2xlRmFjdG9yeSA9IGZhY3RvcnlGb3Ioc2luZ2xlU2NoZW1hKVxuXG4gIGNvbnN0IGNvbGxlY3Rpb25GYWN0b3J5ID0gc3ViamVjdChzaW5nbGVGYWN0b3J5KVxuXG4gIGNvbnN0IHZhbGlkRGF0YVdpdGhJbnN0YW5jZSA9IGNvbGxlY3Rpb25GYWN0b3J5KFt7XG4gICAgcHJvcDE6ICdhJyxcbiAgICBwcm9wMjogJ2InXG4gIH0sIHtcbiAgICBwcm9wMTogJ2MnLFxuICAgIHByb3AyOiAnZCdcbiAgfV0pXG5cbiAgY29uc3QgcmVzdWx0ID0gY29sbGVjdGlvbkZhY3RvcnkodmFsaWREYXRhV2l0aEluc3RhbmNlKVxuXG4gIHQuZGVlcEVxdWFsKHJlc3VsdC50b0pTT04oKSwgdmFsaWREYXRhV2l0aEluc3RhbmNlLnRvSlNPTigpKVxufSlcblxudGVzdCgnR2l2ZW4gYSBzaW5nbGUgb2JqZWN0IGZhY3RvcnkgYW5kIGFuIGFycmF5IG9mIGludmFsaWQgZGF0YSwgd2hlbiBgdmFsaWRhdGUoKWAgaXMgY2FsbGVkLCB0aGVuIGl0IHNob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgZWFjaCBvbmUgb2YgdGhlIGludmFsaWQgZW50aXR5JywgdCA9PiB7XG4gIGNvbnN0IHNpbmdsZVNjaGVtYSA9IHtcbiAgICBwcm9wMToge1xuICAgICAgdmFsaWRhdG9yOiBmb3JiaWRBbnlcbiAgICB9LFxuICAgIHByb3AyOiB7XG4gICAgICB2YWxpZGF0b3I6IGZvcmJpZEFueVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNpbmdsZUZhY3RvcnkgPSBmYWN0b3J5Rm9yKHNpbmdsZVNjaGVtYSlcblxuICBjb25zdCBjb2xsZWN0aW9uRmFjdG9yeSA9IHN1YmplY3Qoc2luZ2xlRmFjdG9yeSlcblxuICBjb25zdCB2YWxpZERhdGEgPSBbe1xuICAgIHByb3AxOiAnYScsXG4gICAgcHJvcDI6ICdiJ1xuICB9LCB7XG4gICAgcHJvcDE6ICdjJyxcbiAgICBwcm9wMjogJ2QnXG4gIH1dXG5cbiAgY29uc3QgcmVzdWx0ID0gY29sbGVjdGlvbkZhY3RvcnkodmFsaWREYXRhKVxuXG4gIGNvbnN0IGVycm9ycyA9IHQudGhyb3dzKCgpID0+IHJlc3VsdC52YWxpZGF0ZSgpKVxuXG4gIHQudHJ1dGh5KGVycm9ycy5kZXRhaWxzWydpdGVtIzAnXS5wcm9wMSlcbiAgdC50cnV0aHkoZXJyb3JzLmRldGFpbHNbJ2l0ZW0jMCddLnByb3AyKVxuICB0LnRydXRoeShlcnJvcnMuZGV0YWlsc1snaXRlbSMxJ10ucHJvcDEpXG4gIHQudHJ1dGh5KGVycm9ycy5kZXRhaWxzWydpdGVtIzEnXS5wcm9wMilcbn0pXG5cbnRlc3QoJ0dpdmVuIGEgc2luZ2xlIG9iamVjdCBmYWN0b3J5IGFuZCBhbiBhcnJheSBvZiB2YWxpZCBkYXRhLCB3aGVuIGB2YWxpZGF0ZSgpYCBpcyBjYWxsZWQsIHRoZW4gaXQgc2hvdWxkIG5vdCB0aHJvdyBhbmQgcmV0dXJuIHRoZSBlbnRpdHkgaXRzZWxmJywgdCA9PiB7XG4gIGNvbnN0IHNpbmdsZVNjaGVtYSA9IHtcbiAgICBwcm9wMToge30sXG4gICAgcHJvcDI6IHt9XG4gIH1cblxuICBjb25zdCBzaW5nbGVGYWN0b3J5ID0gZmFjdG9yeUZvcihzaW5nbGVTY2hlbWEpXG5cbiAgY29uc3QgY29sbGVjdGlvbkZhY3RvcnkgPSBzdWJqZWN0KHNpbmdsZUZhY3RvcnkpXG5cbiAgY29uc3QgdmFsaWREYXRhID0gW3tcbiAgICBwcm9wMTogJ2EnLFxuICAgIHByb3AyOiAnYidcbiAgfSwge1xuICAgIHByb3AxOiAnYycsXG4gICAgcHJvcDI6ICdkJ1xuICB9XVxuXG4gIGNvbnN0IHJlc3VsdCA9IGNvbGxlY3Rpb25GYWN0b3J5KHZhbGlkRGF0YSlcblxuICB0LmlzKHJlc3VsdC52YWxpZGF0ZSgpLCByZXN1bHQpXG59KVxuIl19