UNPKG

water-orm

Version:

A monolith version of Standalone waterline ORM

186 lines (157 loc) 5.49 kB
var Waterline = require('../../../lib/waterline'), assert = require('assert'); describe('Collection Query', function() { describe('.createEach()', function() { describe('with proper values', function() { var query; before(function(done) { var waterline = new Waterline(); var Model = Waterline.Collection.extend({ identity: 'user', connection: 'foo', attributes: { first:{ type: 'string', defaultsTo: 'Foo' }, second: { type: 'string', defaultsTo: 'Bar' }, full: { type: 'string', defaultsTo: function() { return this.first + ' ' + this.second; } }, name: { type: 'string', defaultsTo: 'Foo Bar' }, arr: { type: 'array', defaultsTo: [] }, doSomething: function() {} } }); waterline.loadCollection(Model); // Fixture Adapter Def var adapterDef = { create: function(con, col, values, cb) { return cb(null, values); }}; var connections = { 'foo': { adapter: 'foobar' } }; waterline.initialize({ adapters: { foobar: adapterDef }, connections: connections }, function(err, colls) { if(err) return done(err); query = colls.collections.user; done(); }); }); it('should require an array of values', function(done) { query.createEach({}, function(err, values) { assert(err); done(); }); }); it('should require a valid set of records', function(done) { query.createEach([{},'string'], function(err, values) { assert(err); done(); }); }); it('should add default values to each record', function(done) { query.createEach([{},{}], function(err, values) { assert(Array.isArray(values)); assert(values[0].name === 'Foo Bar'); assert(values[1].name === 'Foo Bar'); done(); }); }); it('should add default values to each record when function', function(done) { query.createEach([{},{}], function(err, values) { assert(Array.isArray(values)); assert(values[0].full === 'Foo Bar'); assert(values[1].full === 'Foo Bar'); done(); }); }); it('should clone default values for each record', function(done) { query.createEach([{},{}], function(err, values) { assert(Array.isArray(values)); assert(values[0].arr !== values[1].arr); values[1].arr.push('another'); assert(values[0].arr.length === 0); assert(values[1].arr.length === 1); done(); }); }); it('should strip values that don\'t belong to the schema', function(done) { query.createEach([{ foo: 'bar' }], function(err, values) { assert(!values[0].foo); done(); }); }); it('should add timestamp values to each record', function(done) { query.createEach([{},{}], function(err, values) { assert(values[0].createdAt); assert(values[0].updatedAt); assert(values[0].createdAt); assert(values[1].updatedAt); done(); }); }); it('should allow a query to be built using deferreds', function(done) { query.createEach() .set([{ name: 'bob' }, { name: 'foo'}]) .exec(function(err, result) { assert(!err); assert(result); assert(result[0].name === 'bob'); assert(result[1].name === 'foo'); done(); }); }); }); describe('casting values', function() { var query; before(function(done) { var waterline = new Waterline(); var Model = Waterline.Collection.extend({ identity: 'user', connection: 'foo', attributes: { name: 'string', age: 'integer' } }); waterline.loadCollection(Model); // Fixture Adapter Def var adapterDef = { create: function(con, col, valuesList, cb) { return cb(null, valuesList); }}; var connections = { 'foo': { adapter: 'foobar' } }; waterline.initialize({ adapters: { foobar: adapterDef }, connections: connections }, function(err, colls) { if(err) done(err); query = colls.collections.user; done(); }); }); it('should cast values before sending to adapter', function(done) { query.createEach([{ name: 'foo', age: '27' }], function(err, values) { assert(values[0].name === 'foo'); assert(values[0].age === 27); done(); }); }); it('should not be detructive to passed-in arrays', function(done) { var myPreciousArray = [{ name: 'foo', age: '27' }]; query.createEach(myPreciousArray, function(err, values) { assert(myPreciousArray.length === 1); done(); }); }); }); }); });