UNPKG

waterline-adapter-tests

Version:
183 lines (162 loc) 4.6 kB
var assert = require('assert'); var _ = require('@sailshq/lodash'); describe('Queryable Interface', function() { describe('OR Query Modifier', function() { describe('with a record', function() { before(function(done) { // Insert 3 Users var users = []; for(var i=0; i<4; i++) { users.push({ first_name: 'OR_user' + i, last_name: 'contains_user' + i, type: 'or test', age: i }); } Queryable.Userforqueryableinterface.createEach(users, function(err, users) { if (err) { return done(err); } return done(); }); }); it('should return the correct users', function(done) { Queryable.Userforqueryableinterface.find({ where: { or: [ { first_name: 'OR_user0' }, { first_name: 'OR_user1' } ] } }) .sort([{first_name: 'asc'}]) .exec(function(err, users) { if (err) { return done(err); } assert(_.isArray(users)); assert.strictEqual(users.length, 2); assert.equal(users[0].first_name, 'OR_user0'); assert.equal(users[1].first_name, 'OR_user1'); return done(); }); }); it('should work with multi-level criteria options inside the OR criteria', function(done) { Queryable.Userforqueryableinterface.find({ or: [ { first_name: { like: '%user0%' }, type: 'or test' }, { first_name: { like: '%user1' }, age: { '>': 0 }, type: 'or test' } ] }) .sort([{first_name: 'asc'}]) .exec(function(err, users) { if (err) { return done(err); } assert(_.isArray(users)); assert.strictEqual(users.length, 2); assert.equal(users[0].first_name, 'OR_user0'); assert.equal(users[1].first_name, 'OR_user1'); return done(); }); }); it('should work correctly when OR is used with AND', function(done) { Queryable.Userforqueryableinterface.find({ type: 'or test', or: [ { first_name: { like: '%user1%' } }, { first_name: { like: '%user2' } } ] }) .sort([{first_name: 'asc'}]) .exec(function(err, users) { if (err) { return done(err); } assert(_.isArray(users)); assert.strictEqual(users.length, 2); assert.equal(users[0].first_name, 'OR_user1'); assert.equal(users[1].first_name, 'OR_user2'); return done(); }); }); it('should work correctly when OR is used with multiple contains modifiers', function(done) { Queryable.Userforqueryableinterface.find({ type: 'or test', or: [ { first_name: { like: '%user0%' } }, { last_name: { like: '%user1%' } } ] }) .sort([{first_name: 'asc'}]) .exec(function(err, users) { if (err) { return done(err); } assert(_.isArray(users)); assert.strictEqual(users.length, 2); assert.equal(users[0].first_name, 'OR_user0'); assert.equal(users[1].last_name, 'contains_user1'); return done(); }); }); }); describe('without a record', function() { it('should return an empty array', function(done) { Queryable.Userforqueryableinterface.find({ where: { or: [ { first_name: 'OR_user10' }, { first_name: 'OR_user11' } ] } }) .exec(function(err, users) { if (err) { return done(err); } assert.strictEqual(users.length, 0); return done(); }); }); }); }); });