mongoose-cursor-pagination
Version:
Mongoose cursor-based pagination.
118 lines (101 loc) • 3.64 kB
JavaScript
;
var _should = require('should');
var _should2 = _interopRequireDefault(_should);
var _mongoose = require('mongoose');
var _mongoose2 = _interopRequireDefault(_mongoose);
var _index = require('../index');
var _index2 = _interopRequireDefault(_index);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
describe('mongoose-cursor-pagination', function () {
before(function () {
_mongoose2.default.Promise = Promise;
return _mongoose2.default.connect('mongodb://127.0.0.1/test', {
useMongoClient: true
});
});
before(function () {
var UserSchema = new _mongoose2.default.Schema({
name: { type: String },
value: { type: Number, unique: true, index: true }
});
UserSchema.plugin(_index2.default, {
limit: 5
});
_mongoose2.default.model('User', UserSchema);
});
before(function () {
return _mongoose2.default.model('User').insertMany(Array(1000).fill().map(function (_, i) {
return {
name: 'User ' + i,
value: i
};
}));
});
after(function () {
return _mongoose2.default.model('User').remove();
});
it('pagination with no options', function () {
return _mongoose2.default.model('User').paginate({}, {
key: 'value'
}).then(function (results) {
_should2.default.equal(results.items.length, 5);
});
});
it('pagination by key and ascendingly', function () {
return _mongoose2.default.model('User').paginate({}, {
key: 'value',
sort: { value: 1 }
}).then(function (results) {
_should2.default.equal(results.items.length, 5);
_should2.default.equal(results.hasMore, true);
_should2.default.equal(results.items[0].value, 0);
_should2.default.equal(results.items[4].value, 4);
});
});
it('pagination by key, ascendingly and startingAfter', function () {
return _mongoose2.default.model('User').paginate({}, {
key: 'value',
sort: { value: 1 },
startingAfter: 4
}).then(function (results) {
_should2.default.equal(results.items.length, 5);
_should2.default.equal(results.hasMore, true);
_should2.default.equal(results.items[0].value, 5);
_should2.default.equal(results.items[4].value, 9);
});
});
it('pagination when it reaches the end', function () {
return _mongoose2.default.model('User').paginate({}, {
key: 'value',
sort: { value: 1 },
startingAfter: 998
}).then(function (results) {
_should2.default.equal(results.items.length, 1);
_should2.default.equal(results.hasMore, false);
_should2.default.equal(results.items[0].value, 999);
});
});
it('pagination by key and descendingly', function () {
return _mongoose2.default.model('User').paginate({}, {
key: 'value',
sort: { value: -1 }
}).then(function (results) {
_should2.default.equal(results.items.length, 5);
_should2.default.equal(results.hasMore, true);
_should2.default.equal(results.items[0].value, 999);
_should2.default.equal(results.items[4].value, 995);
});
});
it('pagination by key, ascendingly and endingBefore', function () {
return _mongoose2.default.model('User').paginate({}, {
key: 'value',
sort: { value: -1 },
endingBefore: 995
}).then(function (results) {
_should2.default.equal(results.items.length, 5);
_should2.default.equal(results.hasMore, true);
_should2.default.equal(results.items[0].value, 994);
_should2.default.equal(results.items[4].value, 990);
});
});
}); /* eslint-env mocha */