UNPKG

water-orm

Version:

A monolith version of Standalone waterline ORM

124 lines (99 loc) 3.6 kB
var assert = require('assert'), _ = require('lodash'); describe('Queryable Interface', function() { describe('GroupBy Query Modifier', function() { ///////////////////////////////////////////////////// // TEST SETUP //////////////////////////////////////////////////// before(function(done) { // Insert 10 Users var users = [], date; for(var i=0; i<10; i++) { users.push({ first_name: 'groupBy_user' + i, type: 'groupBy test', age: i, percent: i/2 }); } Queryable.User.createEach(users, function(err, users) { if(err) return done(err); done(); }); }); ///////////////////////////////////////////////////// // TEST METHODS //////////////////////////////////////////////////// it('should group by keys and sum values', function(done) { Queryable.User.find({ groupBy: ['type'], sum: ['age'] }, function(err, grouped) { assert.ifError(err); var asserted = false; asserted = grouped.filter(function(result){ if(result.type === 'groupBy test') { assert.strictEqual(result.age, 45); // 45 === 0+1+2+3+4+5+6+7+8+9 return true; } return false; }); if(!asserted.length) { return done(new Error('key "groupBy test" not found')); } done(); }); }); it('should group by multiple keys and sum values', function(done) { Queryable.User.find({ groupBy: ['type', 'age'], sum: ['percent'] }, function(err, grouped) { assert.ifError(err); var asserted = grouped.filter(function(result){ if(result.type === 'groupBy test' && result.age === 1) { assert.strictEqual(result.percent, 0.5); return true; } }); if(!asserted.length) { return done(new Error('key "groupBy test" not found')); } done(); }); }); it('should group by keys and both sum and average values', function(done) { Queryable.User.find({ groupBy: ['type'], sum: ['age'], average: ['percent'] }, function(err, grouped) { assert.ifError(err); var asserted = grouped.filter(function(result){ if(result.type === 'groupBy test') { assert.strictEqual(result.age, 45); assert.strictEqual(result.percent, 2.25); return true; } }); if(!asserted.length) { return done(new Error('key "groupBy test" not found')); } done(); }); }); it('should allow match query with groupBy', function(done){ Queryable.User.find({where: { age: { '>': 5 } }, groupBy: ['type'], sum: ['age'], average: ['percent'] }, function(err, grouped) { assert.ifError(err); var asserted = grouped.filter(function(result){ if(result.type === 'groupBy test') { assert.strictEqual(result.age, 30); assert.strictEqual(result.percent, 3.75); return true; } }); if(!asserted.length) { return done(new Error('key "groupBy test" not found')); } done(); }); }); it('should error if not given any calculations to do', function(done) { Queryable.User.find({ groupBy: ['type'] }, function(err, summed) { assert(err); done(); }); }); }); });