UNPKG

sharedb

Version:
114 lines (105 loc) 4.53 kB
var expect = require('expect.js'); var async = require('async'); var util = require('../util'); module.exports = function() { describe('client query', function() { ['createFetchQuery', 'createSubscribeQuery'].forEach(function(method) { it(method + ' on an empty collection', function(done) { var connection = this.backend.connect(); connection[method]('dogs', {}, null, function(err, results) { if (err) return done(err); expect(results).eql([]); done(); }); }); it(method + ' on collection with fetched docs', function(done) { var connection = this.backend.connect(); async.parallel([ function(cb) { connection.get('dogs', 'fido').create({age: 3}, cb); }, function(cb) { connection.get('dogs', 'spot').create({age: 5}, cb); }, function(cb) { connection.get('cats', 'finn').create({age: 2}, cb); } ], function(err) { if (err) return done(err); connection[method]('dogs', {}, null, function(err, results) { if (err) return done(err); var sorted = util.sortById(results); expect(util.pluck(sorted, 'id')).eql(['fido', 'spot']); expect(util.pluck(sorted, 'data')).eql([{age: 3}, {age: 5}]); done(); }); }); }); it(method + ' on collection with unfetched docs', function(done) { var connection = this.backend.connect(); var connection2 = this.backend.connect(); async.parallel([ function(cb) { connection.get('dogs', 'fido').create({age: 3}, cb); }, function(cb) { connection.get('dogs', 'spot').create({age: 5}, cb); }, function(cb) { connection.get('cats', 'finn').create({age: 2}, cb); } ], function(err) { if (err) return done(err); connection2[method]('dogs', {}, null, function(err, results) { if (err) return done(err); var sorted = util.sortById(results); expect(util.pluck(sorted, 'id')).eql(['fido', 'spot']); expect(util.pluck(sorted, 'data')).eql([{age: 3}, {age: 5}]); done(); }); }); }); it(method + ' on collection with one fetched doc', function(done) { var connection = this.backend.connect(); var connection2 = this.backend.connect(); async.parallel([ function(cb) { connection.get('dogs', 'fido').create({age: 3}, cb); }, function(cb) { connection.get('dogs', 'spot').create({age: 5}, cb); }, function(cb) { connection.get('cats', 'finn').create({age: 2}, cb); } ], function(err) { if (err) return done(err); connection2.get('dogs', 'fido').fetch(function(err) { if (err) return done(err); connection2[method]('dogs', {}, null, function(err, results) { if (err) return done(err); var sorted = util.sortById(results); expect(util.pluck(sorted, 'id')).eql(['fido', 'spot']); expect(util.pluck(sorted, 'data')).eql([{age: 3}, {age: 5}]); done(); }); }); }); }); it(method + ' on collection with one fetched doc missing an op', function(done) { var connection = this.backend.connect(); var connection2 = this.backend.connect(); async.parallel([ function(cb) { connection.get('dogs', 'fido').create({age: 3}, cb); }, function(cb) { connection.get('dogs', 'spot').create({age: 5}, cb); }, function(cb) { connection.get('cats', 'finn').create({age: 2}, cb); } ], function(err) { if (err) return done(err); connection2.get('dogs', 'fido').fetch(function(err) { if (err) return done(err); connection.get('dogs', 'fido').submitOp([{p: ['age'], na: 1}], function(err) { if (err) return done(err); // The results option is meant for making resubscribing more // efficient and has no effect on query fetching var options = { results: [ connection2.get('dogs', 'fido'), connection2.get('dogs', 'spot') ] }; connection2[method]('dogs', {}, options, function(err, results) { if (err) return done(err); var sorted = util.sortById(results); expect(util.pluck(sorted, 'id')).eql(['fido', 'spot']); expect(util.pluck(sorted, 'data')).eql([{age: 4}, {age: 5}]); done(); }); }); }); }); }); }); }); };