From cba87ce33934c721c42faf44de0b5e6eb3b95ae1 Mon Sep 17 00:00:00 2001 From: Anatoliy Chakkaev Date: Wed, 27 Mar 2013 00:50:13 +0400 Subject: [PATCH] Query testing: findOne --- lib/adapters/memory.js | 13 ++++---- test/basic-querying.test.js | 65 +++++++++++++++++++++++++++++++++---- 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/lib/adapters/memory.js b/lib/adapters/memory.js index 45caa32f..ca24f722 100644 --- a/lib/adapters/memory.js +++ b/lib/adapters/memory.js @@ -70,11 +70,6 @@ Memory.prototype.all = function all(model, filter, callback) { if (filter) { - // do we need some filtration? - if (filter.where) { - nodes = nodes ? nodes.filter(applyFilter(filter)) : nodes; - } - // do we need some sorting? if (filter.order) { var props = this._models[model].properties; @@ -93,6 +88,12 @@ Memory.prototype.all = function all(model, filter, callback) { }); nodes = nodes.sort(sorting.bind(orders)); } + + // do we need some filtration? + if (filter.where) { + nodes = nodes ? nodes.filter(applyFilter(filter)) : nodes; + } + } process.nextTick(function () { @@ -108,7 +109,7 @@ Memory.prototype.all = function all(model, filter, callback) { } } return 0; - } + } }; function applyFilter(filter) { diff --git a/test/basic-querying.test.js b/test/basic-querying.test.js index 2e3735af..5b48cdfa 100644 --- a/test/basic-querying.test.js +++ b/test/basic-querying.test.js @@ -134,16 +134,68 @@ describe('basic-querying', function() { }); }); + describe('findOne', function() { + + before(seed); + + it('should find first record (default sort by id)', function(done) { + User.all({sort: 'id'}, function(err, users) { + User.findOne(function(e, u) { + should.not.exist(e); + should.exist(u); + u.id.should.equal(users[0].id); + done(); + }); + }); + }); + + it('should find first record', function(done) { + User.findOne({order: 'order'}, function(e, u) { + should.not.exist(e); + should.exist(u); + u.order.should.equal(1); + u.name.should.equal('Paul McCartney'); + done(); + }); + }); + + it('should find last record', function(done) { + User.findOne({order: 'order DESC'}, function(e, u) { + should.not.exist(e); + should.exist(u); + u.order.should.equal(6); + u.name.should.equal('Ringo Starr'); + done(); + }); + }); + + it('should find last record in filtered set', function(done) { + User.findOne({ + where: {role: 'lead'}, + order: 'order DESC' + }, function(e, u) { + should.not.exist(e); + should.exist(u); + u.order.should.equal(2); + u.name.should.equal('John Lennon'); + done(); + }); + }); + + }); + describe('exists', function() { before(seed); it('should check whether record exist', function(done) { - User.exists(1, function(err, exists) { - should.not.exist(err); - should.exist(exists); - exists.should.be.true; - done(); + User.findOne(function(e, u) { + User.exists(u.id, function(err, exists) { + should.not.exist(err); + should.exist(exists); + exists.should.be.true; + done(); + }); }); }); @@ -159,12 +211,13 @@ describe('basic-querying', function() { }); + }); function seed(done) { var count = 0; var beatles = [ - { id: 1, + { name: 'John Lennon', mail: 'john@b3atl3s.co.uk', role: 'lead',