0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

basic pagination, with tests

This commit is contained in:
Tim Griesser 2013-05-27 11:24:06 -04:00
parent 4d0b2ee0c4
commit e9696fcec2
3 changed files with 99 additions and 10 deletions

View file

@ -4,7 +4,7 @@
var _ = require('underscore'),
util = require('util'),
models = require('./models'),
Bookshelf = require('./bookshelf'),
Bookshelf = require('bookshelf'),
BaseProvider = require('./dataProvider.bookshelf.base'),
PostsProvider;
@ -15,6 +15,8 @@
BaseProvider.call(this, models.Post, models.Posts);
};
util.inherits(PostsProvider, BaseProvider);
/**
* Find results by page - returns an object containing the
* information about the request (page, limit), along with the
@ -34,6 +36,12 @@
*/
PostsProvider.prototype.findPage = function (opts) {
var postCollection;
// Allow findPage(n)
if (!_.isObject(opts)) {
opts = {page: opts};
}
opts = _.defaults(opts || {}, {
page: 1,
limit: 15,
@ -67,7 +75,7 @@
}
return qb.count(_.result(collection, 'idAttribute')).then(function (resp) {
var totalPosts = resp.aggregate;
var totalPosts = resp[0].aggregate;
return {
posts: collection.toJSON(),
page: opts.page,
@ -79,7 +87,5 @@
});
};
util.inherits(PostsProvider, BaseProvider);
module.exports = PostsProvider;
}());

View file

@ -6,7 +6,8 @@
var _ = require("underscore"),
should = require('should'),
helpers = require('./helpers'),
PostProvider = require('../../shared/models/dataProvider.bookshelf.posts');
PostProvider = require('../../shared/models/dataProvider.bookshelf.posts'),
Bookshelf = require('bookshelf');
describe('Bookshelf PostsProvider', function () {
@ -16,7 +17,7 @@
helpers.resetData().then(function () {
posts = new PostProvider();
done();
});
}, done);
});
it('can browse', function (done) {
@ -121,5 +122,64 @@
}).then(null, done);
});
it('can fetch a paginated set, with various options', function (done) {
helpers.insertMorePosts().then(function () {
return posts.findPage({page: 2});
}).then(function (paginationResult) {
paginationResult.page.should.equal(2);
paginationResult.limit.should.equal(15);
paginationResult.posts.length.should.equal(15);
paginationResult.pages.should.equal(4);
return posts.findPage({page: 5});
}).then(function (paginationResult) {
paginationResult.page.should.equal(5);
paginationResult.limit.should.equal(15);
paginationResult.posts.length.should.equal(0);
paginationResult.pages.should.equal(4);
return posts.findPage({limit: 30});
}).then(function (paginationResult) {
paginationResult.page.should.equal(1);
paginationResult.limit.should.equal(30);
paginationResult.posts.length.should.equal(30);
paginationResult.pages.should.equal(2);
return posts.findPage({limit: 10, page: 2, where: {language: 'fr'}});
}).then(function (paginationResult) {
paginationResult.page.should.equal(2);
paginationResult.limit.should.equal(10);
paginationResult.posts.length.should.equal(10);
paginationResult.pages.should.equal(3);
done();
}).then(null, done);
});
});
}());

File diff suppressed because one or more lines are too long