Skip to content

Instantly share code, notes, and snippets.

@eugeneware
Created November 5, 2014 02:46
Show Gist options
  • Select an option

  • Save eugeneware/79f44e3e073231ab6677 to your computer and use it in GitHub Desktop.

Select an option

Save eugeneware/79f44e3e073231ab6677 to your computer and use it in GitHub Desktop.
var expect = require('expect.js'),
util = require('util'),
rimraf = require('rimraf'),
level = require('level'),
path = require('path'),
bytewise = require('bytewise'),
range = require('range').range,
after = require('after'),
timestamp = require('monotonic-timestamp'),
through2 = require('through2'),
levelQuery = require('level-query'),
concat = require('concat-stream'),
Models = require('..');
describe('level-query compatibility', function() {
var db, dbPath = path.join(__dirname, '..', 'data', 'testdb');
beforeEach(function(done) {
rimraf.sync(dbPath);
db = level(dbPath, { valueEncoding: 'json' });
done();
});
afterEach(function(done) {
db.close(done);
});
it('should be able to use level-query', function(done) {
function Feed(db) {
Models.call(this, { db: db }, 'feed', ['user', 'id']);
}
util.inherits(Feed, Models);
var feed = new Feed(db);
// pass levelQuery the sublevel to index
var query = levelQuery(feed[feed.name]);
var num = 10;
var users = ['eugeneware', 'rvagg', 'dominictarr'];
var next = after(num * users.length, doQuery);
users.forEach(function (user) {
range(0, num).forEach(function (i) {
feed.save({ user: user, id: timestamp(), message: 'Message ' + i}, next);
});
});
function doQuery() {
var count = 0;
var q = query({ map: [['user', 'message']], filter: ['user', /rvagg/] });
q.pipe(concat(function (results) {
var obj = JSON.parse(results);
var expected = [
[ 'rvagg', 'Message 0' ],
[ 'rvagg', 'Message 1' ],
[ 'rvagg', 'Message 2' ],
[ 'rvagg', 'Message 3' ],
[ 'rvagg', 'Message 4' ],
[ 'rvagg', 'Message 5' ],
[ 'rvagg', 'Message 6' ],
[ 'rvagg', 'Message 7' ],
[ 'rvagg', 'Message 8' ],
[ 'rvagg', 'Message 9' ] ];
expect(obj).to.eql(expected);
done();
}));
}
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment