waterline
Version:
An ORM for Node.js and the Sails framework
188 lines (159 loc) • 4.57 kB
JavaScript
var assert = require('assert');
var _ = require('@sailshq/lodash');
var Waterline = require('../../../lib/waterline');
describe('Collection Query ::', function() {
describe('.find()', function() {
var query;
before(function(done) {
var waterline = new Waterline();
var Model = Waterline.Model.extend({
identity: 'user',
datastore: 'foo',
primaryKey: 'id',
schema: false,
attributes: {
id: {
type: 'number'
},
name: {
type: 'string',
defaultsTo: 'Foo Bar'
}
}
});
waterline.registerModel(Model);
// Fixture Adapter Def
var adapterDef = { find: function(con, query, cb) { return cb(null, [{id: 1, criteria: query.criteria}]); }};
var connections = {
'foo': {
adapter: 'foobar'
}
};
waterline.initialize({ adapters: { foobar: adapterDef }, datastores: connections }, function(err, orm) {
if(err) {
return done(err);
}
query = orm.collections.user;
return done();
});
});
it('should allow options to be optional', function(done) {
query.find({}, function(err) {
if(err) {
return done(err);
}
return done();
});
});
it('should return an array', function(done) {
query.find({}, {}, function(err, values) {
if (err) {
return done(err);
}
assert(_.isArray(values));
return done();
});
});
it('should allow a query to be built using deferreds', function(done) {
query.find()
.where({ name: 'Foo Bar' })
.where({ id: { '>': 1 } })
.limit(1)
.skip(1)
.sort([{ name: 'desc' }])
.exec(function(err, results) {
if (err) {
return done(err);
}
assert(_.isArray(results));
assert.equal(results[0].criteria.limit, 1);
assert.equal(results[0].criteria.skip, 1);
assert.equal(results[0].criteria.sort[0].name, 'DESC');
return done();
});
});
describe('.paginate()', function() {
it('should skip to 0 and limit to 30 by default', function(done) {
query.find()
.paginate(0)
.exec(function(err, results) {
if (err) {
return done(err);
}
assert(_.isArray(results));
assert.equal(results[0].criteria.skip, 0);
assert.equal(results[0].criteria.limit, 30);
return done();
});
});
it('should set skip to 0 from page 0', function(done) {
query.find()
.paginate(1)
.exec(function(err, results) {
if (err) {
return done(err);
}
assert.equal(results[0].criteria.skip, 30);
return done();
});
});
it('should set skip to 0 from page 1', function(done) {
query.find()
.paginate(1)
.exec(function(err, results) {
if (err) {
return done(err);
}
assert.equal(results[0].criteria.skip, 30);
return done();
});
});
it('should set skip to 30', function(done) {
query.find()
.paginate(2)
.exec(function(err, results) {
if (err) {
return done(err);
}
assert.equal(results[0].criteria.skip, 60);
return done();
});
});
it('should set limit to 1', function(done) {
query.find()
.paginate(1, 1)
.exec(function(err, results) {
if (err) {
return done(err);
}
assert.equal(results[0].criteria.limit, 1);
return done();
});
});
it('should set skip to 20 and limit to 10', function(done) {
query.find()
.paginate(2, 10)
.exec(function(err, results) {
if (err) {
return done(err);
}
assert.equal(results[0].criteria.skip, 20);
assert.equal(results[0].criteria.limit, 10);
return done();
});
});
it('should set skip to 30 and limit to 10', function(done) {
query.find()
.paginate(3, 10)
.exec(function(err, results) {
if (err) {
return done(err);
}
assert.equal(results[0].criteria.skip, 30);
assert.equal(results[0].criteria.limit, 10);
return done();
});
});
});
});
});