UNPKG

happner

Version:

distributed application engine with evented storage and mesh services

262 lines (170 loc) 5.85 kB
describe('c3 - client data search', function () { this.timeout(120000); require('benchmarket').start(); after(require('benchmarket').store()); var should = require('chai').should(); var Mesh = require('../'); var meshInstance; var meshClientInstance; var dataEvents; var config; var expect = require('expect.js'); var async = require('async'); var TestModule1 = { setSharedData: function ($happn, path, data, callback) { $happn.exchange.data.set(path, data, callback); } } var TestModule2 = { getSharedData: function ($happn, path, callback) { $happn.exchange.data.get(path, callback); } } before(function (done) { var _this = this; Mesh.create(config = { modules: { 'module1': { instance: TestModule1 }, 'module2': { instance: TestModule2 } }, components: { 'data': {}, 'module1': {}, 'module2': {}, } }).then(function (mesh) { meshInstance = mesh; meshClientInstance = new Mesh.MeshClient(); meshClientInstance.login().then(done); }).catch(done); }); after(function (done) { meshInstance.stop({reconnect: false}, done); }); context('direct use', function () { it('can get using criteria', function (done) { meshInstance.exchange.data.set('movie/war', {name: 'crimson tide', genre: 'war'}, function (e, result) { if (e) return done(e); var options = { sort: {"name": 1} } var criteria = { "name": "crimson tide" } meshInstance.exchange.data.get('movie/*', {criteria: criteria, options: options}, function (e, result) { if (e) return done(e); result.length.should.eql(1); done(); }); }); }); //DOESNT WORK USING NEDB PLUGIN it('can get using criteria, limit to fields', function (done) { meshInstance.exchange.data.set('movie/war/ww2', {name: 'crimson tide', genre: 'ww2'}, function (e, result) { if (e) return done(e); var options = { fields: {"name": 1} } var criteria = { "genre": "ww2" } meshInstance.exchange.data.get('movie/*', {criteria: criteria, options: options}, function (e, result) { if (e) return done(e); expect(result[0].genre).to.be(undefined); result[0].name.should.eql('crimson tide'); result.length.should.eql(1); done(); }); }); }); it('can get the latest record', function (done) { var indexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; async.eachSeries(indexes, function (index, eachCallback) { meshInstance.exchange.data.set('movie/family/' + index, {name: 'the black stallion', genre: 'family'}, eachCallback); }, function (e) { if (e) return callback(e); var options = { sort: {"_meta.created": -1}, limit: 1 } var criteria = { "genre": "family" } var latestResult; meshInstance.exchange.data.get('movie/*', {criteria: criteria, options: options}, function (e, result) { if (e) return done(e); result.length.should.eql(1); latestResult = result[0]; expect(latestResult._meta.created).to.not.be(null); expect(latestResult._meta.created).to.not.be(undefined); meshInstance.exchange.data.get('movie/family/*', function (e, result) { if (e) return callback(e); for (var resultItemIndex in result) { var resultItem = result[resultItemIndex]; expect(resultItem._meta.created).to.not.be(null); expect(resultItem._meta.created).to.not.be(undefined); if ((resultItem._meta.path != latestResult._meta.path) && resultItem._meta.created > latestResult._meta.created) return done(new Error('the latest result is not the latest result...')); } done(); }); }); }); }); }); context('client use', function () { it('can get using criteria', function (done) { meshClientInstance.exchange.data.set('movie/comedy', {name: 'nkandla', genre: 'comedy'}, function (e, result) { if (e) return done(e); var options = { sort: {"_meta.created": 1} } var criteria = { "genre": "comedy" } meshClientInstance.exchange.data.get('movie/*', {criteria: criteria, options: options}, function (e, result) { if (e) return done(e); result.length.should.eql(1); result[0].name.should.eql('nkandla'); done(); }); }); }); }); context('client data use', function () { it('can get using criteria', function (done) { meshClientInstance.data.set('movie/drama', {name: 'nkandla2', genre: 'drama'}, function (e, result) { if (e) return done(e); var options = { sort: {"name": 1} } var criteria = { "genre": "drama" } meshClientInstance.data.get('movie/*', {criteria: criteria, options: options}, function (e, result) { if (e) return done(e); result.length.should.eql(1); result[0].name.should.eql('nkandla2'); done(); }); }); }); }); require('benchmarket').stop(); });